轉自http://blog.csdn.net/libaineu2004/article/details/19491579ios
關鍵字 explicit 能夠禁止「單參數構造函數」被用於自動類型轉換,主要用於 "修飾 "構造函數. 指明構造函數只能顯示使用,目的是爲了防止沒必要要的隱式轉化.函數
關鍵字 explicit 能夠禁止「單參數構造函數」被用於自動類型轉換。光看這一句彷佛不太容易明白,下面,舉個簡單地例子。ui
//main.cpp
#include <iostream>spa
using namespace std;.net
class Test
{
public:
Test(int a)
{
m_data = a;
}對象
void show()
{
cout << "m_data = " << m_data << endl;
}blog
private:
int m_data;
};ci
void main(void)
{
Test t = 2; // 將一個常量賦給了一個對象
t.show();
}編譯器
編譯可以經過,執行結果:m_data = 2。it
爲何會這樣呢?原來C++經過隱式轉換,構造了一個臨時對象Test(2),將它賦給了t(這裏調用了默認的構造函數,而不是重載的「=」,由於這是在對象建立的時候)。那麼,若是給構造函數加上關鍵字 explicit ,構造函數變成了 explicit Test(int a),再次編譯,編譯器就會報錯。這時,就只能顯式地使用構造函數了Test t = Test(2) 。
看過這段,仍是不太理解explicit,因而又找到這樣一篇文章http://blog.csdn.net/guodongxiaren/article/details/24455653?utm_source=tuicool&utm_medium=referral CSDN上的一個牛人所寫,看過之後,會理解的更透徹。