c++常用特性學習總結
阿新 • • 發佈:2018-12-21
1.關鍵字和新語法
1.1 auto關鍵字及用法
A.概念和一般用法
auto一般習慣稱作自動型別推斷。由其含義不難得出,凡是前面慣有auto的變數或者函式,其型別將會由編譯器按照上下推斷出來。對於變數,指定要宣告的變數的型別講自動從其初始化中推斷出來。對於函式,指定返回型別為其返回值型別。
#include <iostream> #include <typeinfo> using namespace std; //返回型別為numA + numB 即int auto test(int numA,int numB) { return numA + numA; } int main() { int nNumA = 3,nNumB = 4; //返回型別為int auto nNumC = test(nNumA, nNumB); cout << nNumC << " " << typeid(nNumC).name() << endl; return 0; }
從上面的例子我們可以出來,auto確實進行了自動型別推斷的功能,並且實際型別正確無誤。
B.注意事項
1.auto可以同時宣告多個變數,但變數的型別必須一致。
2.在塊作用域、名稱空間範圍、for迴圈的初始化語句中宣告變數時,可以使用關鍵字AUTO作為型別說明符。
3.在不使用尾部返回型別語法的函式宣告中,關鍵字AUTO表示將使用模板引數演繹規則從返回語句的運算元中推斷返回型別。
4.在使用尾部返回型別語法的函式宣告中,關鍵字AUTO不執行自動型別檢測。它只作為語法的一部分。
C.提醒
直到C++ 11,Auto具有儲存持續時間說明符的語義。
1.2 nullptr關鍵字及用法
A.nullptr的作用
測試如下程式碼
#include <iostream>
using namespace std;
void testA(int n)
{
cout << "testA" << endl;
}
void testA(int *n)
{
cout << "testB" << endl;
}
int main()
{
testA(nullptr);
testA(NULL);
return 0;
}
結構如下圖所示
其實我們的本意都是想呼叫testA(int *n),但是測試程式給出的結果和我們的預期又不不同,因為編譯將其解釋為一個空值並不是空指標。
B.內部可能的實施
#define NULL 0
//since C++11
#define NULL nullptr
1.3 基於範圍的迴圈
學習使用c++的時候,我們經常吐槽for迴圈沒有python使用起來那麼方便,每次必須必須至少寫一個引數,但是c++新增基於範圍迴圈的特性,我們可以按照下面的方法使用for迴圈。
#include <iostream>
using namespace std;
int main()
{
int n [] = {1,2,3,4,5};
for(auto i : n)
cout << i << endl;
return 0;
}
當然,基於範圍的迴圈對於所有STl容器都是適應的。