我有下面的代碼構造代替或類型轉換操作
class A {
private:
int n;
public:
A(int n) : n{n} {}
A(const A & a) : n{a.n} {}
};
class B {
private:
int m;
public:
B(int n) : m{n} {}
operator A() const { return A(m); }
operator int() const { return m; }
};
int main(int, char**)
{
B b{1};
(A)b; // Fails
static_cast<A>(b); // Fails
b.operator A(); // OK
}
這種失敗
call of overloaded ‘A(B&)’ is ambiguous
(GCC,但VC++和鐺似乎處理同樣的方式)
我以爲所有三個都是完全一樣的東西。使用B的運算符A()進行轉換。顯然這不是發生了什麼事情。爲什麼?
這個問題很容易通過使int()運算符顯式解決,但我在解釋之後不是解決方案。
這就是爲什麼我們現在有顯式類型轉換操作符現在,如'顯式運算符A()const;'。所以static_cast和C風格的轉換是可能的,但不是隱式轉換。 – 2014-10-07 16:58:29