auto關鍵字
1.概念::auto不再是乙個儲存型別指示符,而是作為乙個新的型別指 示符來指示編譯器,auto宣告的變數必須由編譯器在編譯時期推導而得.
注意:auto是乙個根據給的資料確定型別的符號,可以說他不是一種"型別"的申明符,它更像是乙個佔位符,佔著位置,給句位置上的資料給型別的符號,所以一定要初始化.
int
testauto()
intmain()
2.使用細則
(1) auto與指標和引用結合起來使用
用auto宣告指標型別時,用auto和auto*沒有任何區別,但用auto宣告引用型別時則必須加&
(2)在同一行定義多個變數
當在同一行宣告多個變數時,這些變數必須是相同的型別,否則編譯器將會報錯,因為編譯器實際只對第乙個 型別進行推導,然後用推導出來的型別定義其他變數。
3.不可以使用的場景
(1)不能作為函式的引數
(2)不能直接用來申明陣列
(3) auto不能定義類的非靜態成員變數
(4)例項化模板時不能使用auto作為模板引數
基於範圍的for迴圈
1.概念
對於乙個有範圍的集合而言,由程式設計師來說明迴圈的範圍是多餘的,有時候還會容易犯錯誤。因此c++11中引 入了基於範圍的for迴圈。for迴圈後的括號由冒號「 :」分為兩部分:第一部分是範圍內用於迭代的變數,第二 部分則表示被迭代的範圍
例如:
void
testfor()
;for
(int i =
0; i <
sizeof
(array)
/sizeof
(array[0]
);++i)
array[i]*=
2;for(
int* p = array;p < array +
sizeof
(array)
/sizeof
(array[0]
);++p)
cout <<
*p << endl;
}
void
testfor()
;for
(auto
& e : array) e *=2
;for
(auto e : array) cout << e <<
" ";
return0;
}
2.使用條件
(1)迴圈範圍必須是確定的
(2)迭代的物件要實現++和==的操作。
指標空值
1.概念
null可能被定義為字面常量0,或者被定義為無型別指標(void*)的常量。不論採取何種定義,在 使用空值的指標時,都不可避免的會遇到一些麻煩
.2 nullptr 與 nullptr_t
為了考慮相容性,c++11並沒有消除常量0的二義性,c++11給出了全新的nullptr表示空值指標。c++11為什麼 不在null的基礎上進行擴充套件,這是因為null以前就是乙個巨集,而且不同的編譯器廠商對於null的實現可能 不太相同,而且直接擴充套件null,可能會影響以前舊的程式。因此:為了避免混淆,c++11提供了nullptr, 即:nullptr代表乙個指標空值常量。nullptr是有型別的,其型別為nullptr_t,僅僅可以被隱式轉化為指標類 型,nullptr_t被定義在標頭檔案中:
typedef decltype(nullptr) nullptr_t;
注意:在使用nullptr表示指標空值時,不需要包含標頭檔案,因為nullptr是c++11作為新關鍵字引入的。
在c++11中,sizeof(nullptr) 與 sizeof((void*)0)所佔的位元組數相同。
為了提高**的健壯性,在後續表示指標空值時建議好使用nullptr。
C 的幾個知識點
1 陣列的氣泡排序 int nums new int int temp 0 for int j 0 j nums.length 1 j for int i 0 i nums.length i console.readkey 2 反轉語句 array.reverse nums for int i le...
C 11 標準及知識點的記錄 1
1 constexpr和常量表示式 常量表示式 const expression 是指值不會改變並且在編譯過程就能得到的計算結果。c 11 新標準規定,允許將變數宣告為constexpr型別以便由編譯器來驗證變數的值是否乙個常量表示式。宣告為constexpr的變數一定是乙個常量,而且必須用常量表示...
C 11標準及知識點的記錄(3)
建構函式 1 類通過乙個或幾個特殊的成員函式來控制其物件的初始化過程。2 建構函式的任務是初始化類物件和資料成員,無論何時只要類的物件被建立,就會執行建構函式。3 沒有返回型別。4 建構函式可以過載 不同的建構函式之間必須在引數數量或引數型別上有所不同 5 不同於其他成員函式,建構函式不能被宣告為c...