運算符重載的這種風格是什麼意思?class Bar {operator Foo(); }
class Foo {
Foo(int a) { ... }
};
class Bar {
operator Foo() { return Foo(25); }
};
運算符重載的這種風格是什麼意思?class Bar {operator Foo(); }
class Foo {
Foo(int a) { ... }
};
class Bar {
operator Foo() { return Foo(25); }
};
即其中Bar
實例轉換成Foo
隱式用戶定義轉換功能。
Bar bar;
Foo foo = bar; // bar implicitly converts into Foo.
這是因爲如果你寫的:
Foo foo = Foo(25);
如果你已經這樣的轉換功能,那麼你可以調用這個:
void f(Foo foo); //a function which accepts Foo
f(bar); // bar implicitly converts into Foo.
所以這種隱轉換可能不太合適,因爲它可能會導致問題,併產生意想不到的結果。爲了避免這種情況,可以使轉換功能明確爲(在C++ 11只):
//valid in C++11 only
class Bar {
explicit operator Foo() { return Foo(25); }
};
現在,這兩個會給予錯誤:
Foo foo = bar; //error
f(bar); //error
但是,以下是允許:
Foo foo = static_cast<Foo>(bar); //Ok
f(static_cast<Foo>(bar)); //Ok
快速的手指,你已經得到了:) – Chad 2011-12-30 20:16:53
使用'在C++ 11中引入了「顯式」用於運算符轉換? AFAIR只有構造函數可以明確在c + + 03中,或許我沒記錯...... – 2011-12-30 20:24:12
@Als:你說得對。在C++ 03中,只有構造函數可以是顯式的。我在答覆中明確表達了這一點。 – Nawaz 2011-12-30 20:25:22