C++中explict關(guān)鍵字用法
C++提供了關(guān)鍵字explicit,可以阻止不應(yīng)該允許的經(jīng)過轉(zhuǎn)換構(gòu)造函數(shù)進行的隱式轉(zhuǎn)換的發(fā)生。聲明為explicit的構(gòu)造函數(shù)不能在隱式轉(zhuǎn)換中使用。
c++規(guī)定:對于可能只需傳一個參數(shù)的默認構(gòu)造函數(shù),都定義了一種隱式調(diào)用。
注意:只需傳一個參數(shù)不僅指的是只有一個參數(shù)的默認構(gòu)造函數(shù),也指那些包含了定義了參數(shù)默認值的那些默認構(gòu)造函數(shù)。
舉例說明:
class MyClass
{
public:
MyClass();
MyClass(string s);
MyClass(int i, int y = 0);
}
這里的MyClass(string s)函數(shù)和MyClass(int i, int y = 0)函數(shù)都是可能只需傳一個參數(shù)的默認構(gòu)造函數(shù)
看一下使用構(gòu)造函數(shù)構(gòu)造類對象的情況:
•MyClass obj1;//OK,調(diào)用了MyClass()
•MyClass obj2(string("Hello World!"));//OK,調(diào)用了MyClass(string s)
•MyClass obj3(12, 12);//OK,調(diào)用了MyClass(int i, int y = 0)
•MyClass obj4(12);//同上
•MyClass obj5 = 12;//同上。但是對于obj5,實際上等價于MyClass temp(12);MyClass obj5(temp);//也就是說默認調(diào)用了默認拷貝構(gòu)造函數(shù)。這就是所謂的隱式調(diào)用。
大部分情況下,隱式調(diào)用都會產(chǎn)生bug,而且很難察覺?;诖?,C++引入explict關(guān)鍵字關(guān)閉這種隱式調(diào)用,避免因為隱式調(diào)用而產(chǎn)生的bug。
相關(guān)文章
C++動態(tài)分配和撤銷內(nèi)存以及結(jié)構(gòu)體類型作為函數(shù)參數(shù)
這篇文章主要介紹了C++動態(tài)分配和撤銷內(nèi)存以及結(jié)構(gòu)體類型作為函數(shù)參數(shù),是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-09-09
C語言實現(xiàn)十進制轉(zhuǎn)任意進制的代碼詳解
這篇文章主要介紹了C語言實現(xiàn)十進制轉(zhuǎn)任意進制,運用一個數(shù)組,通過數(shù)字每次取任意進制模,存在數(shù)組中, 再通過倒取數(shù)組中的數(shù)值,來實現(xiàn)進制轉(zhuǎn)換,如果遇到十六進制,利用ASCII碼值 數(shù)字字符和大寫字母 相差55的特性來解決,文中有詳細代碼示例,需要的朋友可以參考下2024-05-05
vs2022項目文件夾內(nèi).vs文件夾容量虛高問題的解決
經(jīng)常會發(fā)現(xiàn)VS的項目文件夾占用空間很大,本文主要介紹了vs2022項目文件夾內(nèi).vs文件夾容量虛高問題的解決,具有一定的參考價值,感興趣的可以了解一下2023-09-09
C++實現(xiàn)LeetCode(110.平衡二叉樹)
這篇文章主要介紹了C++實現(xiàn)LeetCode(110.平衡二叉樹),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-07-07
關(guān)于函數(shù)調(diào)用方式__stdcall和__cdecl詳解
下面小編就為大家?guī)硪黄P(guān)于函數(shù)調(diào)用方式__stdcall和__cdecl詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-09-09

