#include
using
namespace std;
class
student
student
(string name,
int age)
private
: string name;
int age;};
intmain()
;return0;
}
我們比較常用的是顯示構造,但是用賦值符號時進行隱式構造時,這種情況下我們進行編譯時沒有沒有任何問題的,一樣可以執行
當我們在類的建構函式前面加上explicit關鍵字時,如下
我們發現會報錯,「student」 的複製列表初始化不能使用顯式建構函式
這是因為我們在建構函式前新增explicit關鍵字時,該建構函式會被宣告為顯式建構函式,就無法進行隱式構造,即使用賦值號進行初始化成員函式的操作
如果我們沒有宣告explicit關鍵字時,預設顯式構造和隱式構造都可以進行成員初始化操作
原來:explicit關鍵字是為了防止隱式使用拷貝建構函式進行初始化類成員
為什麼要這樣做呢?
使用explicit可以防止發生混淆,因為這個符號『 = 』 我們一般看做賦值號,但是在開發專案時,特別是多人開發的專案時,特別是參與二次開發的專案,如果**量很多的時候,看到這個符號很容易愣住,到底是賦值呢?還是構造呢?
這會導致開發效率和**可閱讀力下降
所以有些團隊或公司,明確必須使用顯示構造,也防止二次開發的人員進行隱式構造的操作,在建構函式前調加explicit關鍵字,避免後續開發**現的問題
。。。。。。
C 11 新增容器 array
array 容器是 c 11 標準中新增的序列容器,簡單地理解,它就是在 c 普通陣列的基礎上,新增了一些成員函式和全域性函式。array是將元素置於乙個固定陣列中加以管理的容器。array可以隨機訪問元素,支援索引值直接訪問,用操作符或at 方法對元素進行操作,也可以使用迭代器訪問 不支援動態的新...
C 11新增的類功能
如果您提供了析構函式,複製建構函式或複製賦值運算子 那麼移動建構函式和移動賦值運算子將不會被自動提供 如果您提供了移動建構函式或移動賦值運算子 那麼複製建構函式和複製構造運算子將不會被自動提供 testclass explicit testclass const string newmessage ...
std iota實現遞增序列(c 11新增)
原生陣列和vector array都不支援構造乙個遞增的陣列,比如乙個包含0 999的size為1000的陣列。int ids 1000 for int i 0 i 1000 i 如果是std vector,則是 std vector int ids ids.resize 1000 for int ...