auto

提供: RAD Studio
移動先: 案内検索

キーワード(アルファベット順):インデックス への移動


auto キーワードは C++11 および C++17 標準で再定義されました。 したがって、C++Builder では auto の異なる定義をサポートしており、そのどちらになるかは、各 C++ コンパイラが準拠している標準で決まります。

このページは、auto の定義で説明します。

C++98 の定義

カテゴリ

記憶クラス指定子(C++)

構文

[auto] <data-definition> ;

説明

auto 修飾子を使用すると、ローカル スコープでのみ有効なものとしてローカル変数を定義できます。

これはローカル変数のデフォルトであり、使用されることはまれです。

例:

void f() {
        auto int x;
}

C++11 での定義

カテゴリ

型指定子

構文

[auto] <variable_name> = <initializer_expression> ;

説明

auto は、セマンティクスを初期化子式から推測する単純型指定子として使用されます。

例:

int f() {
        return 1;
}

int _tmain(int argc, _TCHAR* argv[]) {
        auto x = f();
        return 0;
}

この例では、変数 x の型はその初期化子式 f() から推測されます。 そのため、xint 型となり、これは、 f() が返す型です。

C++14 の定義

C++14 では、auto はメソッドの戻り値型として使用して戻り値型を推測し、また、C++ と同様、変数や定数の型推論にも使用可能です。

例:

// C++14 introduces using the auto keyword for a return type
auto MyMethod() {
    return Hello world;
}
int _tmain(int argc, _TCHAR* argv[]) {
// C++11 introduced type deduction for a variable / constant
        auto x = MyMethod();
        return 0;
}

C++17 での定義

In C++17, auto はテンプレート パラメータで型や、構造型バインディングに対して推測するために使用できます。

構造型バインディングにより、簡単に個々の変数をタプルの要素に関連づけることができます。これにより、std::tuple を使用して効果的に複数の戻り値を返しているメソッドは、呼び出しているメソッド内で、それらの値を複数の変数に個別に割り当てることができます。

例:

std::tuple<int, float> returnMultiple()

{ int i = 1; float f = 3.14; return std::make_tuple(i, f); }
// In the calling method, with i and f predefined variables:
auto [i, f] = returnMultiple();

コード移行上の問題

Clang 拡張 C++ コンパイラは、古い auto 構文(つまり、記憶クラス指定子として使用されている auto)に遭遇すると、次の警告を発します:

[<compiler> Warning] File1.cpp(12): 'auto' storage class specifier is not permitted in C++11, and will not be supported in future releases.

関連項目