explicit關(guān)鍵字 c 中的explicit關(guān)鍵字是什么意思知道?
c 中的explicit關(guān)鍵字是什么意思知道?關(guān)鍵字explicit可以防止轉(zhuǎn)換構(gòu)造函數(shù)發(fā)生不允許的隱式轉(zhuǎn)換。聲明為顯式的構(gòu)造函數(shù)不能用于隱式轉(zhuǎn)換。在C語言中,參數(shù)構(gòu)造函數(shù)(或?qū)Τ谝粋€參數(shù)外的所有
c 中的explicit關(guān)鍵字是什么意思知道?
關(guān)鍵字explicit可以防止轉(zhuǎn)換構(gòu)造函數(shù)發(fā)生不允許的隱式轉(zhuǎn)換。聲明為顯式的構(gòu)造函數(shù)不能用于隱式轉(zhuǎn)換。在C語言中,參數(shù)構(gòu)造函數(shù)(或?qū)Τ谝粋€參數(shù)外的所有參數(shù)都具有默認值的多參數(shù)構(gòu)造函數(shù))承擔(dān)兩個角色。
1是構(gòu)造函數(shù)
2是默認的隱式類型轉(zhuǎn)換運算符。所以,有時候我們寫AAA=XXX這樣的代碼,XXX的類型正好是AAA單參數(shù)構(gòu)造函數(shù)的參數(shù)類型,編譯器會自動調(diào)用這個構(gòu)造函數(shù)來創(chuàng)建AAA對象。它看起來既酷又方便。但在某些情況下(見下面的權(quán)威例子),這違背了我們的初衷。此時,我們需要在構(gòu)造函數(shù)前面添加顯式修飾符,以指定只能顯式調(diào)用和使用構(gòu)造函數(shù),而不能隱式用作類型轉(zhuǎn)換運算符。呵呵,看來還是光明正大為好。顯式構(gòu)造函數(shù)的函數(shù)分析:顯式構(gòu)造函數(shù)用于防止隱式轉(zhuǎn)換。請參見以下代碼:類test1{public:test1(int n){num=n}//普通構(gòu)造函數(shù)private:int num}類test2{public:explicit test2(int n){num=n}//顯式構(gòu)造函數(shù)private:int num}int main(){test1 T1=12//隱式調(diào)用其構(gòu)造函數(shù),成功的test2 T2=12//編譯錯誤,無法隱式調(diào)用其構(gòu)造函數(shù)Test2 T3(12)//調(diào)用成功。Return 0}test1的構(gòu)造函數(shù)接受int參數(shù)。代碼的第19行將被隱式轉(zhuǎn)換為調(diào)用test1的構(gòu)造函數(shù)。test2的構(gòu)造函數(shù)聲明為顯式的,這意味著不能通過隱式轉(zhuǎn)換調(diào)用構(gòu)造函數(shù),因此第20行將出現(xiàn)編譯錯誤??梢噪[式調(diào)用普通構(gòu)造函數(shù)。顯式構(gòu)造函數(shù)只能由display調(diào)用。
VB中通用聲明Option Explicit是什么意思啊?有什么作用?
Option explicit通常放在程序和子例程的頂部,告訴VB的解釋器或編譯器:“在使用它之前,所有變量都需要定義。使用optionexplicit可以避免拼寫錯誤、類型錯誤和結(jié)果錯誤。使用optionexplicit可以加快程序的運行速度。因為它節(jié)省了動態(tài)分配可變存儲空間的時間和操作尋址時間。沒有預(yù)先定義的變量是“variant”變量,它可以存儲各種類型的變量,是最慢的變量類型。使用option explicit,您將預(yù)先聲明它們的類型,而不是變量。
為什么復(fù)制構(gòu)造函數(shù)不添加explicit前綴?
關(guān)鍵字explicit可以阻止“單參數(shù)構(gòu)造函數(shù)”用于自動類型轉(zhuǎn)換(隱式類型轉(zhuǎn)換)
class test{
private:
int data
public:
test(int data=0){}
test(const test&RHS){}]}
不帶顯式,測試s=4可以編譯并通過
但是對于顯式,測試(4)不是必需的
那么復(fù)制構(gòu)造函數(shù)的定義是什么?也就是說,構(gòu)造函數(shù)的參數(shù)屬于這種類型。只要此類型的對象用于初始化同一類型的其他對象,將調(diào)用復(fù)制構(gòu)造函數(shù)。
例如:
test a=4//將不在此處調(diào)用復(fù)制構(gòu)造函數(shù)
test B=a//將在此處調(diào)用復(fù)制構(gòu)造函數(shù)
因此復(fù)制構(gòu)造函數(shù)中沒有隱式類型轉(zhuǎn)換問題,因此不需要顯式