auto
auto
キーワードは C++11 標準で再定義されました。 したがって、C++Builder では auto
の 2 つの異なる定義をサポートしており、そのどちらになるかは、各 C++ コンパイラが準拠している標準で決まります。
- C++11 標準での定義は、旧世代の C++ コンパイラ(BCC32 および BCCOSX)でサポートされています。
- C++11 標準での定義 は、Clang 拡張 C++ コンパイラでサポートされています。
このページでは、auto
の両方の定義について説明します。
C++11 での定義
カテゴリ
構文
[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()
から推測されます。 そのため、x
は int 型となり、これは、 f()
が返す型です。
コード移行上の問題
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.