
項目 14:例外を発生させない関数は noexcept と宣言する
|
87
C++98 でイテレータを用いる場合には非現実的なためです。しかし C++11 では充分に現実的です。
さらに C++14 では、C++11 がわずかにやり残したこともきれいに片付けました。
重要ポイント
•
iterator よりも const_iterator を優先する。
•
汎用性を最大限備えたコードでは、非メンバ関数の begin、end、rbegin などを、同機能の
メンバ関数よりも優先する。
項目 14:例外を発生させない関数は noexcept と宣言する
C++98 の例外指定はどちらかというと手に負えない猛獣のようなものでした。関数内で発生する
可能性がある例外型をまとめなければならないため、関数の実装を変更したら例外指定も追随し変
更しなければならない場合がありました。コード利用者は変更前の例外指定を想定しているのです
から、例外指定の変更により利用者のコードが動作しなくなる恐れもあります。関数の実装、例外指
定、利用者のコード間の不一致について、コンパイラは一般に何も手助けをしてくれません。C++98
の例外指定はそんな手間をかけるに値しないというのが、ほとんどのプログラマが出した結論です。
C++11 標準化の過程で、関数内での例外発生について真に意味ある情報とは、発生する可能性が
あるか否かであるという合意に達しました。関数は例外を発生させる可能性があるか、またはない
か、黒か白かのどちらかです。この発生の