c++轉換構造函數和類型轉換函數

  看stl源碼時,有一段代碼感受很奇怪node

iterator begin() { return (link_type)((*node).next); }

iterator和link_type是兩種不一樣類型,怎麼能這麼返回呢?翻了一下之前的筆記,發現是由轉換構造函數生成臨時對象再return。c++

轉換構造函數的做用是將某種類型的數據轉換爲類的對象,當一個構造函數只有一個參數,並且該參數又不是本類的const引用時,這種構造函數稱爲轉換構造函數。試驗了一下函數

class A
{
public:
    int a;
    A(int a) :a(a) {}
    A reta()
    {
        return a;
    }
};
int main()
{
    A a(2);
    A b = a.reta();
    A c = 3;
    cout<<b.a<<"\n"<<c.a<<endl;
    return 0;
}

 結果是輸出2和3測試

實際上這是由隱式轉換機制形成的,若是不想要這種效果,能夠在構造函數前加上explicit聲明。加上以後上面的代碼就會編譯出錯,提示spa

沒法從「int」轉換爲「A」。code

既然能將數據轉換爲類型,類型也能轉換爲數據。c++的類型轉換函數能夠將一個類的對象轉換爲一個指定類型的數據。htm

類型轉換函數的通常形式爲 :
operator 類型名()
{實現轉換的語句}
測試代碼:
 
class A
{
public:
    int a;
    A(int a) :a(a) {}
    operator int()
    {
        return a;
    }
};
int main()
{
    A a(2);
    int b = a + 3;
    A c = a + 4;
    cout<<b<<"\n"<<c.a<<endl;
    return 0;
}

結果輸出5和6對象

相關文章
相關標籤/搜索