
42
|
2 章 auto
しかしこれでは「この関数の戻り値の精度を敢えて落としている」という点が伝わりにくいでしょ
う。明示的型付け初期化子イディオムを用いると次のように記述できます。
auto ep = static_cast<float>(calcEpsilon());
浮動小数点数の式を敢えて汎整数値として保持させる場面でも同様のことが言えます。ランダム
アクセスイテレータ(std::vector、std::deque、std::array など)を備えるコンテナ内の要素
のインデックスを算出する場合を考えましょう。先頭要素から見た、目的の要素の位置が 0.0 から
1.0 の範囲の double で与えられたとします(0.5 がコンテナ内での中央を表す)。また、算出結果
のインデックスは必ず int で表現できるとします。コンテナを c、double を d とすると、インデッ
クスは次のように算出できます。
int index = d * (c.size() - 1);
しかし、これでは右辺の double を int へ変換しているのが意図的か否かが充分に表現できてい
ません。明示的型付け初期化子イディオムを用いるとこの点が明確になります。
auto index = static_cast<int>(d * (c.size() - 1));
正誤表より補足
上例の index 算出では、コンテナが空でないことを前提にします。
また、index が c.size() - 1 と等しくなるのは(すな