サーチ…


前書き

このトピックでは、C ++ 11から使用可能なキーワードautoタイプを含む型推論について説明します。

備考

通常、コピーや突然変異などの望ましくない動作を防ぐ必要がある場合は、 autoを使用するたびにconst&constexprを宣言する方がよいでしょう。これらの追加のヒントは、コンパイラが他の形式の推論を生成しないようにします。また、 autoを使用することはお勧めできません。実際の宣言が非常に長い場合、特にSTLテンプレートの場合にのみ使用してください。

データタイプ:自動

この例は、コンパイラが実行できる基本型推論を示しています。

auto a = 1;        //    a = int
auto b = 2u;       //    b = unsigned int
auto c = &a;       //    c = int*
const auto  d = c; //    d = const int*
const auto& e = b; //    e = const unsigned int& 

auto x = a + b     //    x = int, #compiler warning unsigned and signed

auto v = std::vector<int>;    //    v = std::vector<int>

ただし、autoキーワードは、 &またはconstまたはconstexpr追加ヒントなしに、期待される型推論を実行するとは限りません

//    y = unsigned int, 
//    note that y does not infer as const unsigned int&
//    The compiler would have generated a copy instead of a reference value to e or b
auto y = e;    

ラムダオート

データ型autoキーワードは、プログラマーがラムダ関数を宣言するのに便利な方法です。これは、関数ポインタを宣言するためにプログラマが入力する必要があるテキストの量を減らすのに役立ちます。

auto DoThis = [](int a, int b) { return a + b; };
//    Do this is of type (int)(*DoThis)(int, int)
//    else we would have to write this long
int(*pDoThis)(int, int)= [](int a, int b) { return a + b; };

auto c = Dothis(1, 2);    //    c = int
auto d = pDothis(1, 2);   //    d = int

//    using 'auto' shortens the definition for lambda functions

デフォルトでは、ラムダ関数の戻り値の型が定義されていない場合、戻り値の型から自動的に推定されます。

これらの3は基本的に同じものです

[](int a, int b) -> int  { return a + b; };
[](int a, int b) -> auto { return a + b; };
[](int a, int b) { return a + b; };

ループとオート

この例は、forループの型宣言を短縮するためにautoを使用する方法を示しています。

std::map<int, std::string> Map;
for (auto pair : Map)            //    pair = std::pair<int, std::string>
for (const auto pair : Map)      //    pair = const std::pair<int, std::string>    
for (const auto& pair : Map)     //    pair = const std::pair<int, std::string>&
for (auto i = 0; i < 1000; ++i)        //    i = int
for (auto i = 0; i < Map.size(); ++i)  //    Note that i = int and not size_t
for (auto i = Map.size(); i > 0; --i)  //    i = size_t


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow