この回答std::ifstream
では、オブジェクトの変換を使用しbool
て、ストリームがまだ良好な状態にあるかどうかをテストすることについて話します。詳細について Josuttis の本 (p. 600) を調べたところ、iostream
オブジェクトが実際にオーバーロードしていることがわかりましたoperator void*
。ストリームが不正な場合 (暗黙的に に変換される) は null ポインターを返し、false
それ以外の場合 (暗黙的に に変換される) は非null ポインターを返しますtrue
。オーバーロードしないのはなぜoperator bool
ですか?
質問する
3772 次
3 に答える
13
C++0x 標準セクション 27.4.4.3 に答えがあるようです (私の強調)。
operator unspecified-bool-type() const;
戻り値: If
fail()
then は、ブール コンテキストで false と評価される値。それ以外の場合は、ブール コンテキストで true と評価される値。 返される値の型は に変換できませんint
。注: この変換は、
bool
が期待されるコンテキスト (if 条件など) で使用できます。int
ただし、 で発生する可能性のある暗黙的な変換 ( など)bool
は許可されていないため、ユーザー エラーの原因がいくつか排除されます。
于 2009-08-26T13:55:54.750 に答える
8
これは、「セーフ ブール」問題の例です。
ここに良い記事があります: http://www.artima.com/cppsource/safebool.html .
C++0x は、explicit
Kristo が言及している変更だけでなく、変換関数の状況にも役立ちます。C++ 11 では、safe-bool イディオムは廃止されましたか? .
于 2011-08-05T06:16:34.700 に答える
0
最新のC++11には、次のものが必要です。
explicit operator bool() const;
C ++1127.5.5.4-1を参照してください。しかし、「明示的」は私には奇妙に思えます。
于 2012-05-15T06:15:28.760 に答える