
項目 6:auto が期待とは異なる型を推論する場面では ETII を用いる
|
37
項目 6:auto が期待とは異なる型を推論する場面では E TII を用いる
項目 5 では、型を明示的に記述するよりも auto を用い変数を宣言する、実用上の利点を多数挙げ
解説しました。しかし、auto による型の推論結果が想定と食い違うこともあります。例えば、実引
数に Widget をとり、std::vector<bool> を返す関数があるとしましょう。各 bool が特定の性質
に対応し、実引数の Widget がその性質を備えているか否かを表すとします。
std::vector<bool> features(const Widget& w);
ここで 5 ビット目が、Widget の優先度が高いか否かを表すとします。すると次のようなコードを
記述できます。
Widget w;
…
bool highPriority = features(w)[5]; // is w high priority?
… w は高優先度か?
processWidget(w, highPriority); // process w in accord
// with its priority
優先度に従い w を処理する
上例のコードに何も悪いところはありません。問題なく動作するでしょう。ここで、何の気無し
に highPriority の明示的型宣言を次のように auto へ置き換えたとします。
auto highPriority