if()
の動作を次のように変更することは可能ですか?
class Foo {
int x;
};
Foo foo;
if(foo)
x
の値がゼロ以外の場合にのみ続行しますか? また...
int への明示的なユーザー定義型変換は機能しますか?それは適切なアプローチでしょうか? また...
のようなことをするのが最善if(foo.getX())
ですか?
if()
の動作を次のように変更することは可能ですか?
class Foo {
int x;
};
Foo foo;
if(foo)
x
の値がゼロ以外の場合にのみ続行しますか? また...
int への明示的なユーザー定義型変換は機能しますか?それは適切なアプローチでしょうか? また...
のようなことをするのが最善if(foo.getX())
ですか?
以下を定義することにより、オブジェクトをブール値に変換できますoperator bool()
。
explicit operator bool() const
{
return foo.getX();
}
このキーワードは、 からへのexplicit
暗黙的な変換を防ぎます。たとえば、誤って のような算術式を入力した場合、として宣言すると、コンパイラはこのエラーを検出できます。Foo
bool
foo
foo + 1
operator bool()
explicit
foo
bool
一般に、次の形式のメンバー関数
operator TypeName()
(オプションexplicit
とconst
修飾子付き) は変換演算子です。で指定された任意の型にクラスをキャストできますTypeName
。逆に、1 つの引数を持つコンストラクターを使用すると、任意の型をクラスにキャストできます。
class Foo {
Foo(int x); // convert int to Foo
operator bool() const; // convert Foo to bool
int x;
};
これにより、クラスの暗黙的な変換が定義されます。コンパイラは、可能であればこれらの変換を適用しようとします (たとえば、組み込みのデータ型に対して行うことと同様5 + 1.0
)。explicit
不要な暗黙の変換を抑制するために、それらを宣言することができます。