auto、decltype、型推論
autoとdecltypeでコンパイラーに型を推論させ、コードを簡潔にします。
「auto、decltype、型推論」はCoddyKit上の無料C++ Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC++ Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C++ Academyコースには全4レッスンが含まれています。
現代 C++ における型推論
C++11 以降、コンパイラーは多くの場所で型を推論できます。適切に使えば、コードを短くし、エラーを減らせます。
auto キーワード
auto はコンパイル時に初期化子から型を推論します。変数は依然として、固定された静的に既知の型を持ちます。
auto i = 42; // int
auto d = 3.14; // double
auto s = "hello"; // const char*
auto v = std::vector<int>{1,2,3}; // std::vector<int>auto と const
デフォルトでは、auto はトップレベルの const と参照を取り除きます。保持したい場合は明示的に追加してください。
const int n = 10;
auto a = n; // int (const dropped)
const auto& b = n; // const int&イテレーターと auto
イテレーターの型名は長くなります。この場面で auto が役立ちます。
std::map<std::string, int> ages = {{"Ada", 30}};
auto it = ages.find("Ada");
// vs std::map<std::string,int>::iterator it = ...範囲ベース for と auto
コピーせずに反復処理するには、auto& を使用します。
for (const auto& [name, age] : ages) {
std::cout << name << ": " << age << "\n";
}後置戻り値型
関数では、auto を戻り値のプレースホルダーとして使い、後置矢印で型を指定できます。テンプレートで便利です。
auto add(int a, int b) -> int {
return a + b;
}C++14 の戻り値型推論
C++14 では、単純な auto の戻り値型が使用できます。コンパイラーは return 文から型を推論します。
auto multiply(double x, double y) {
return x * y; // deduced as double
}decltype:式の型を取得する
decltype(expr) は、コンパイル時に expr の型を返します。auto とは異なり、参照と const を保持します。
int x = 0;
int& r = x;
decltype(r) ref = x; // int&
decltype(x) val = 0; // intdecltype(auto)
型推論とdecltypeの規則を組み合わせ、値カテゴリーを含む式の正確な型を保持します。
auto a = some_func(); // copy
decltype(auto) b = some_func(); // exact type, including referencesautoを避ける場面
推論される型が分かりにくい場合はautoを避けます。大きな数値リテラル、異なる型が混在する計算、プラットフォーム固有のサイズなどが該当します。読みやすさのため、型を明示してください。
ほぼ常にautoスタイル
暗黙の変換を避けるため、すべての変数にautoを使うことを推奨するスタイルガイドもあります。一方で、型を明示することを好むものもあります。規約を決め、一貫して適用してください。
クイックチェック
参照を返す場合、autoとdecltype(auto)にはどのような違いがありますか。
まとめ
autoは初期化子から型を推論し、decltypeは式の型を示し、decltype(auto)は参照を保持したまま型を推論します。記述の冗長さを減らすために使えますが、読みやすさは保ってください。
よくある質問
「auto、decltype、型推論」レッスンは無料ですか?
はい。「auto、decltype、型推論」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C++ Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C++ Academyコースには全4レッスンが含まれています。
「auto、decltype、型推論」で何を学びますか?
autoとdecltypeでコンパイラーに型を推論させ、コードを簡潔にします。 ブラウザで直接実行するハンズオンコードでC++ Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
C++ Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのC++ Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「auto、decltype、型推論」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このC++ Academyレッスンでコードを書いて実行できますか?
はい。すべてのC++ Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。