C++中explict關(guān)鍵字用法
C++提供了關(guān)鍵字explicit,可以阻止不應(yīng)該允許的經(jīng)過轉(zhuǎn)換構(gòu)造函數(shù)進(jìn)行的隱式轉(zhuǎn)換的發(fā)生。聲明為explicit的構(gòu)造函數(shù)不能在隱式轉(zhuǎn)換中使用。
c++規(guī)定:對于可能只需傳一個(gè)參數(shù)的默認(rèn)構(gòu)造函數(shù),都定義了一種隱式調(diào)用。
注意:只需傳一個(gè)參數(shù)不僅指的是只有一個(gè)參數(shù)的默認(rèn)構(gòu)造函數(shù),也指那些包含了定義了參數(shù)默認(rèn)值的那些默認(rèn)構(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ù)都是可能只需傳一個(gè)參數(shù)的默認(rèn)構(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,實(shí)際上等價(jià)于MyClass temp(12);MyClass obj5(temp);//也就是說默認(rèn)調(diào)用了默認(rèn)拷貝構(gòu)造函數(shù)。這就是所謂的隱式調(diào)用。
大部分情況下,隱式調(diào)用都會產(chǎn)生bug,而且很難察覺?;诖?,C++引入explict關(guān)鍵字關(guān)閉這種隱式調(diào)用,避免因?yàn)殡[式調(diào)用而產(chǎn)生的bug。
相關(guān)文章
C++實(shí)現(xiàn)順序表的常用操作(插入刪出查找輸出)
實(shí)現(xiàn)順序表的插入,刪除,查找,輸出操作在C語言中經(jīng)常用到。下面小編給大家整理實(shí)現(xiàn)代碼,一起看下吧2016-08-08C++實(shí)現(xiàn)將數(shù)組中的值反轉(zhuǎn)
這里給大家分享的事一則C++實(shí)現(xiàn)將數(shù)組中的值反轉(zhuǎn)的代碼,取材自《C++程序設(shè)計(jì)》(梁勇著第三版367頁),有需要的小伙伴可以參考下2016-05-05C++實(shí)現(xiàn)LeetCode(173.二叉搜索樹迭代器)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(173.二叉搜索樹迭代器),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08