0Pricing
C++ Academy · レッスン

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;  // int

decltype(auto)

型推論とdecltypeの規則を組み合わせ、値カテゴリーを含む式の正確な型を保持します。

auto         a = some_func();   // copy
decltype(auto) b = some_func();  // exact type, including references

autoを避ける場面

推論される型が分かりにくい場合は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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. auto、decltype、型推論
  2. 範囲ベースfor、nullptr、enum class
  3. ラムダ式:キャプチャ、mutable、ジェネリック
  4. 構造化束縛とif-init(C++17)
← C++ Academyに戻る