上期我們說到了部分c++修補C語言的不足,今天我們將剩下的一一說清楚。
函數重載
(1).函數重載的形式
C語言不允許函數名相同的同時存在,但是C++允許同名函數存在,但是有要求:函數名相同,參數不同,構成函數重載。
那么有哪幾種參數不同的情況可以呢?
(2).函數重載編譯器如何區分
當我們著手一些大的項目時,就會存在聲明和定義分離的情況,那么這個時后編譯器還能區分嗎?
答案是可以的,這個時候就需要函數名修飾規則登場了。(注意:函數名修飾規則每個編譯器都不一樣,不需要知道內容,只需要知道有這個規則可以區分函數。)
引用(重點)
引用并不是定義新變量,而是給一個變量取別名。如圖所示,會發現他們指向同一塊地址。
(1).引用的使用場景
①引用做參數
當我們希望形參的改變影響實參,就可以傳引用。例子:Swap交換函數,曾經我們書寫還需要穿他的地址,解引用…但是我們現在直接傳引用即可。
void Swap(int& a, int& b)
{int tmp = a;a = b;b = tmp;
}
int main()
{int x = 10;int y = 20;Swap(x, y);cout << x << endl;cout << y << endl;return 0;
}
②引用做返回值
int& func()
{int a = 20;return a;
}
int main()
{int& ret = func();return 0;
}
上述代碼有錯嗎?有什么錯?
答案:有錯,a是局部變量,當函數結束,a的生命周期結束了,這個時候引用返回的是a本身而不是a的值,就會存在野引用。所以引用不能用于返回臨時變量和局部變量。
可以用引用返回的:全局,靜態,堆變量。
(2).引用的特性
(3).引用和指針的區別
內聯函數
有些比較短的函數,我們需要多次頻繁的去調動,但是不斷創建棧幀就會浪費空間,那么C語言是怎么做的呢?宏函數,但是宏函數存在很多的缺陷,所以C++就出現了內聯函數。
內聯函數(inline):調用地方展開,不會建立棧幀。
auto自動識別類型
(1).使用場景
①自動識別復雜類型
我們在學習C語言的時候,有函數指針和數組指針等等復雜類型,那么這個時候就可以用auto來自動識別。
②范圍for
范圍for只能用在數組和其他數據結構中!
空指針nullptr
在c中NULL表示空指針,但是在c++中出現了一個問題。發現了NULL和0沒區別。從此以后初始化空指針用:nullptr
以上就是所有入門小知識,恭喜大家,邁進了c++大門~!希望大家永遠保持熱情勇敢走下去!