teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

より詳細な説明を追加

2020/01/02 05:56

投稿

SaitoAtsushi
SaitoAtsushi

スコア5740

answer CHANGED
@@ -1,2 +1,5 @@
1
- `std::basic_istream` (の基底である `std::basic_ios`) には `operator bool` が定義されています。
1
+ `std::basic_istream` (の基底である `std::basic_ios`) には `operator bool` が定義されています。 すなわち、 `bool` にキャスト可能で、そのようにキャストした場合にはメンバ関数 `fail` の返却値を逆にした値を返します。
2
+
2
- わち、 `bool` にキャスト可能で、メンバ関数 `fail` の返却値にした値返します。
3
+ んらかの理由 (`eof` に到達した場合を含む) で入力処理がされなかった場合にはストリームに失敗フラグが設定されますので、メンバ関数 `fail` を呼び出した場合、 `bool` キャストした場合にはそれに基づいたされます。 つまり、繰り返式の条件式にストリームを置いた場合には `eof` に到達するで繰り返という意味に使えます
4
+
5
+ ただし、 `eof` に到達する以外の理由でも失敗フラグが設定されることは有りますので、エラーの対処をしっかりやりたい場合には個別のチェックが必要でしょう。 また、プログラムを読む人にとっても (まさに質問者がそうであるように) 暗黙の型変換を活用されるとどういう意味があるのかわかり難いのでメンバ関数 `fail` を陽に呼ぶ方がより親切な書き方ではあるかもしれません。

1

書式指定追加

2020/01/02 05:56

投稿

SaitoAtsushi
SaitoAtsushi

スコア5740

answer CHANGED
@@ -1,2 +1,2 @@
1
- std::basic_istream (の基底である std::basic_ios) には operator bool が定義されています。
1
+ `std::basic_istream` (の基底である `std::basic_ios`) には `operator bool` が定義されています。
2
- すなわち、 bool にキャスト可能で、メンバ関数 fail の返却値を逆にした値を返します。
2
+ すなわち、 `bool` にキャスト可能で、メンバ関数 `fail` の返却値を逆にした値を返します。