C++ 標準 I/O ストリーム クラスは、ストリームの状態をチェックするために使用されるios
2 つのオーバーロードされた演算子!
を定義します。void*
例えば:
ifstream fin("hello.txt");
if (fin) {} // ios::operator void*() is called
if (!fin) {} // ios::operator !() is called
ただし、オーバーロードされた 2 つの演算子はやり過ぎだと思います。オーバーロードされた関数が 1 つだけではないのはなぜoperator bool()
ですか?
これは、I/O ストリーム クラスがbool
C++ キーワードの 1 つになる前に広く使用されていたためと考えられます。言い換えれば、下位互換性のためだけにそれらを保持してください。
下位互換性のためだけに、なぜ非推奨としてマークされていないのですか? 下位互換性がない場合、何のために?