布爾型數據隻有兩個值?這裡順便回顧一下C中的知識:,今天小編就來說說關于布爾型數據隻有兩個值?下面更多詳細答案一起來看看吧!
這裡順便回顧一下C中的知識:
内聯 inline: 和#define很像
就是用已被編譯好的二進制代碼,替換對函數的調用,避免調用開銷(棧區到代碼區的調用)
使用inline關鍵字期望該函數被優化内聯,不過是否内聯由編譯器決定
内聯函數的缺點:inline會使占用内存變大
另外!複雜的函數和遞歸不可以用内聯,因為遞歸是調用自己,會占用非常大非常大的内存空間。
重載:同一作用域,函數名相同,參數表不同的函數
重載和形參名無關
不同作用域同名函數遵循臨近隐藏原則
重載和返回類型無關
參數表不同:1.類型不一樣 2.數目不一樣 3.順序不一樣
- void foo(){
- cout << "void foo();" << endl;
- }
- void foo(int a){
- cout << "void foo(int a);" << endl;
- }
- void foo(int a,int b){
- cout << "void foo(int a,int b);" << endl;
- }
- void foo(int a,double b){
- cout << "void foo(int a,double b);" << endl;
- }
- void foo(double a,int b){
- cout << "void foo(double a,int b);" << endl;
- }
- int main()
- {
- foo();
- foo(1);
- foo(1 , 2);
- foo(1 , 3.14);
- foo(3.14 , 1);
- }
那麼!問題來了!編譯器是怎麼區别函數的重載的呢?
其實,我們起的函數的名字編譯器會給我們改掉
我們在Linux下用nm命令查看一下C 編譯器給函數取的名字
- # nm 2.out
- 0000000100000de0 T __Z3foodi
- 0000000100000cf0 T __Z3fooi
- 0000000100000d90 T __Z3fooid
- 0000000100000d40 T __Z3fooii
- 0000000100000b50 T __Z3foov
我們可以看到C 的編譯器給我們取的函數名是帶了參數的~
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!