このスタイルの演算子オーバーロードは何を意味しますか?クラス{演算子Foo(); }
Foo
暗黙に
Bar
のインスタンスを変換するユーザ定義の変換関数である
class Foo {
Foo(int a) { ... }
};
class Bar {
operator Foo() { return Foo(25); }
};
このスタイルの演算子オーバーロードは何を意味しますか?クラス{演算子Foo(); }
Foo
暗黙に
Bar
のインスタンスを変換するユーザ定義の変換関数である
class Foo {
Foo(int a) { ... }
};
class Bar {
operator Foo() { return Foo(25); }
};
。
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
cast operator
のオーバーロードです。私は見つけることができる最良のドキュメントは、基本的にMSDN
たあなたはBar
を持っている場合は、特定の値で構成されているFoo
にキャストすることができます:あなたが持っている
Bar b;
Foo f = b;
素早い指:) – Chad
使用して '明示的に '演算子の変換はC++ 11で導入されていますか? AFAIRのみのコンストラクタはC++ 03で明示的にできますか、おそらく私は正しく覚えていません。 –
@Als:そうです。 C++ 03では、コンストラクタのみが明示的になります。私はこれを私の答えで明らかにした。 – Nawaz