歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C++ 隱式類類型轉化 Implicit Class-Type Conversions

C++ 隱式類類型轉化 Implicit Class-Type Conversions

日期:2017/3/1 10:03:01   编辑:Linux編程

一些類的構造器總是用explicit修飾,這是為什麼呢?它是做什麼用的呢?

我們先看看這個程序:

#include <iostream>

#include <string>

using namespace std;

class MyClass

{

public:

MyClass(string n = "name") : name(n)

{

cout << "construct" << endl;

}

void myFunc(const MyClass &c) const

{

cout << name << endl;

}

private:

string name;

};

int main()

{

MyClass c;

string a = "xiaoming";

c.myFunc(a);

return 0;

}

運行結果:

construct

construct

name

從運行結果可以看到構造函數執行了兩次,分析程序,第一次調用時發生在MyClass c時,那麼第二此時只能是myFunc(a)中,實時上也如此。這裡是發生了隱式類類型轉化。中間把”xiaoming”的string類型傳遞給了myFunc函數,並臨時調用構造器生成一個臨時實例來執行這個myFunc函數。

某些地方我們期待那麼可以這麼用,但是如果我們不想發生隱式轉化(有時候這種轉化會很荒謬),那麼就使用explicit修飾構造器。這就將抑制由構造器定義的隱式轉化。我們加上後,再編譯就會編譯不過。

另外,explicit只需要在類裡聲明,在外部重復聲明將會報錯。

如果我們定義的類有explicit抑制了,我們卻想轉化,只能顯式轉化:c.myFunc(MyClass(a))。

Copyright © Linux教程網 All Rights Reserved