[英]Is this a constructor operator or conversion operator?
class B
{
public:
operator B() const{ } // What is this and what is the purpose?
private:
int m_i;
};
所以問題是,轉換運算符或構造函數運算符是什么用的呢? 在哪里使用它?
它是一個永遠不會被隱式調用的轉換函數。 該標准實際上深入探討了這個問題。 12.3.2 / 1:
轉換函數從不用於將(可能是cv限定的)對象轉換為(可能是cv限定的)相同的對象類型(或對它的引用),轉換為該類型的(可能是cv限定的)基類(或引用它)或(可能是cv-qualified)void。
在腳注中,
這些轉換被視為標准轉換,用於重載解析(13.3.3.1,13.3.3.1.4),因此初始化(8.5)和顯式轉換(5.2.9)。 轉換為void不會調用任何轉換函數(5.2.9)。 即使從未直接調用執行轉換, 也可以聲明此類轉換函數,並且可以通過調用基類中的虛擬轉換函數來實現。
此外,轉換函數仍然是正常函數,可以通過名稱顯式調用。
關於虛函數的注釋適用於這樣的代碼:
class B;
struct A {
virtual operator B() const = 0;
};
struct B : A
{
public:
operator B() const{ return B(); } // virtual override
private:
int m_i;
};
A const & q = B(); // q has dynamic type B, static type A
B r = q; // Convert A to B using B::operator B()
迂腐:“轉換運算符”是一個很差的術語。 這些被稱為轉換函數 ,盡管有operator
關鍵字,但它們不被認為是運算符重載的情況。
它是一個轉換運算符。 它可以讓你投類型的對象B
到類型的對象B
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.