8
閱讀this後,我試圖使這種轉換與static_cast
:的static_cast轉換構造VS轉換操作符
class A;
class B {
public:
B(){}
B(const A&) //conversion constructor
{
cout << "called B's conversion constructor" << endl;
}
};
class A {
public:
operator B() const //conversion operator
{
cout << "called A's conversion operator" << endl;
return B();
}
};
int main()
{
A a;
//Original code, This is ambiguous,
//because both operator and constructor have same cv qualification (use -pedantic flag)
B b = a;
//Why isn't this ambiguous, Why is conversion constructor called,
//if both constructor and operator have same c-v qualification
B c = static_cast<B>(a);
return 0;
}
我預計它不能編譯,因爲兩者構造和操作具有相同C-V資格。然而它編譯成功,並且static_cast
調用構造函數而不是運算符。爲什麼?
我明白,這句話意味着如果'B臨時(一)'是有效的'static_cast'可以執行,但我不明白爲什麼構造函數優先。 – PcAF
@PcAF,我找不到一個說'static_cast'可以使用轉換運算符執行的子句。但是,如果有一個,則優先級低於上述優先級。 –
@R Sahu刪除'B(const A&)'轉換構造函數,現在'static_cast'與轉換運算符一起工作。 – PcAF