簡述C 11新增的explicit關鍵字作用

2021-10-23 05:06:08 字數 1250 閱讀 4595

#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 ...