auto: 型推論でコードを簡潔に
C++11の革命。長い型名とおさらば。
auto
コンパイラに型推論させる。
decltype
式の型を取得。
後置戻り値型
-> で戻り値型を後ろに書く。
auto とは?
昔のC++では、プログラマが律儀に全ての型を書いていました。しかしコンパイラは実は右辺を見れば型が分かっています。auto は「コンパイラが分かることはコンパイラに任せる」という現代的なスタイル(AAA: Almost Always Auto)の基本です。
// 基本的な autoauto x = 42; // intauto y = 3.14; // doubleauto s = "hello"s; // std::string
// イテレータで便利std::vector<int> v = {1, 2, 3};for (auto it = v.begin(); it != v.end(); ++it) { std::cout << *it << "";}
// 範囲for文for (auto& elem : v) { elem *= 2; // 参照で変更}型推論結果
auto x = 42; // int\nauto y = 3.14; // double\nauto it = v.begin(); // vector::iterator
Bad
// ❌ Bad: 長い型名を繰り返しstd::map<std::string, std::vector<int>>::iterator it = myMap.begin();Good
// ✅ Good: auto で簡潔auto it = myMap.begin();高度な使い方
// auto + const/&const auto& ref = expensiveObject; // const参照auto&& universal = getResult(); // 転送参照
// 戻り値型の推論auto add(int a, int b) { return a + b; // int を推論}
// 後置戻り値型auto multiply(int a, int b) -> int { return a * b;}
// decltype(auto) で正確な型を維持decltype(auto) getRef() { static int x = 10; return (x); // int& を返す} Tip: 参照を保持したいときは auto& か const auto&。
合格ライン
auto と auto& の違いを説明できる
範囲for文で auto を使える
参考リンク
演習課題
課題1: auto vs auto&
vectorの要素を範囲forで変更するとき、auto& と auto の違いを確認してください。
課題2: 型推論の実験
decltype を使って auto で推論された型を表示してください。