c中explicit關鍵字是什麼意思

2021-03-04 04:56:55 字數 1507 閱讀 7741

1樓:倒黴熊

關鍵字explicit可以禁止bai「單引數構造du函式」被用於自動類zhi型dao轉換

class stack

;沒有explicit的話

內stack s = 40;能編譯通過

而有explicit則不能,必需

容stack s(40);

c++中的建構函式..前加上explicit有什麼用??

2樓:匿名使用者

c++提供了關鍵字explicit,可以阻止不應該允許的經過轉換建構函式進行的隱式轉換的發生。宣告為explicit的建構函式不能在隱式轉換中使用。

c++中, 一個引數的建構函式, 承擔了兩個角色。 1 是個構造器 2 是個預設且隱含的型別轉換操作符。

所以, 有時候在我們寫下如 aaa = ***, 這樣的**, 且恰好***的型別正好是aaa單引數構造器的引數型別, 這時候編譯器就自動呼叫這個構造器, 建立一個aaa的物件。

這樣看起來好象很酷, 很方便。 但在某些情況下(見下面權威的例子), 卻違背了我們(程式設計師)的本意。 真是成也蕭何, 敗也蕭何。

這時候就要在這個構造器前面加上explicit修飾, 指定這個構造器只能被明確的呼叫,使用, 不能作為型別轉換操作符被隱含的使用。 呵呵, 看來還是光明正大些比較好。

explicit建構函式的作用

解析:explicit建構函式是用來防止隱式轉換的。請看下面的**:

1 class test1

2 //普通建構函式

5 private:

6 int num;

7 };

8 9 class test2

10 //explicit(顯式)建構函式

13 private:

14 int num;

15 };

16 17 int main()

18 test1的建構函式帶一個int型的引數,**19行會隱式轉換成呼叫test1的這個建構函式。而test2的建構函式被宣告為explicit(顯式),這表示不能通過隱式轉換來呼叫這個建構函式,因此**20行會出現編譯錯誤。

普通建構函式能夠被隱式呼叫。而explicit建構函式只能被顯示呼叫。

3樓:匿名使用者

測試一下這段**,然後把t的建構函式前面加上explicit再測一下看會有什麼錯誤?

class t

int geti()const

private:

int n;

};void fun(t &t)

int main()

4樓:匿名使用者

class stack

explicit 表示禁止從型別int到型別stack的隱式轉換:

stack s1(40); // ok

stack s2 = 40; // error推薦c++ 語言作者寫的書《c++程式設計語言》,關於c++ 這門語言,你想知道的裡面幾乎都有哈!

資料庫中的關鍵字,主關鍵字,外關鍵字

因為學號和課copy號 組成了一個唯一標識 哪個學生的成績啊!在s中學號是主關鍵字 sc是s和c表延伸的表 在sc中學號和課號是關鍵字 但是不是主關鍵字 因為並不能只通過學號或課號能唯一確定哪個個學生的成績 同一個學生可以選多個課程 而同樣 同一個課程可以有很多同學選擇 所以必須要兩個關鍵字 才能確...

c中的const何readonly關鍵字含義和作用有什麼區

常數表示式是在編譯時可被完全計算的表示式。因此不能從一個變數中提取的值來初始化常量。如果const int a b 1 b是一個變數,顯然不能再編譯時就計算出結果,所以常量是不可以用變數來初始化的。readonly 允許把一個欄位設定成常量,但可以執行一些運算,可以確定它的初始值。因為readonl...

c語言裡面的關鍵字發音,c語言裡面的32個關鍵字發音

中文譯音跟後面了 auto 宣告自動變數 一般不使用 奧透 double 宣告雙精度變數或函式 大伯歐 int 宣告整型變數或函式 因特 struct 宣告結構體變數或函式 四抓科特 break 跳出當前迴圈 布瑞克 else 條件語句否定分支 與 if 連用 愛歐斯 long 宣告長整型變數或函式...