
|
31
2 章
auto
概念としての auto はこの上なく単純ですが、その内容は見た目ほど単純ではありません。タイ
プ量を節約できる点は間違いありませんが、正しさと性能の点で従来の手書きによる型宣言を混乱
させてしまう恐れがあります。さらに、推論規則に完全に準じているにも関わらず、プログラマか
ら見て結果が完全に誤っていることもあります。この場合でも、従来の手書きによる型宣言に戻る
などは可能な限り避けるのが最善であり、auto が型を正しく推論できるようにする方法を把握して
おくことが重要です。
本章では簡潔ながら auto のすべてを解説します。
項目 5:明示的型宣言よりも auto を優先する
さて、普段目にするコードから例を 1 つ挙げましょう。
int x;
あ、待って。いけない。x を初期化していない。これでは値が不定になってしまう。たぶんね。
実際にはゼロで初期化されるかもしれないけれど、コンテクスト依存です。やれやれ。
でも、気にせずに別の馴染み深い例も見てみましょう。今度はローカル変数を宣言し、イテレー
タの値で初期化する例です1。
template<typename It> // algorithm to dwim ("do what I mean")
void dwim(It b, It e) // for all elements in range from
{ // b to e
while (b != e) {
typename std::iterator_traits<It>::value_type ...