之前在項目中有看到過explicit關鍵字,不過不清楚是什麼作用。
網上大致查了一下。
首先它僅限於描述構造函數,然後它的作用是避免隱式調用構造函數。
什麼時候會觸發隱式調用呢?
舉個栗子:
//測試類Test
class Test
{
public:
Test()
{
m_iValueA = 0;
m_iValueB = 0;
}
explicit Test(int iA,int iB = 4)
{
m_iValueA = iA;
m_iValueB = iB;
}
int m_iValueA;
int m_iValueB;
};
int main()
{
Test testTemp1(5);
Test testTemp2 = 5;
}
這裏的Test testTemp2 = 5;就是在隱式調用Test(int iA,int iB = 4)這個構造函數,而因爲聲明瞭explicit關鍵字,所以它的編譯時無法通過的。
它的作用在於禁止一些我們未察覺到的隱式調用,避免程序中意料之外的情況發生。
(代碼借鑑於http://blog.csdn.net/chollima/article/details/3486230)