auto - C++入門

スポンサーリンク

C++auto型とは、C++11で追加された型推論です。コンパイル時に型を推測し、適切な型として扱ってくれます。

読み方

auto
おーと

概要

auto型を使用するとコードが簡単に書けるようになります。イテレータのコードが非常に単純になります。さらに Range based forを利用することにより、さらにコードは簡素になります。

これは、イテレータの例です。ループを書くために、たくさん書かないといけません。

std::vector<int> v;
for(std::vector<int>::iterator it = v.begin(); it != v.end(); ++it) {
	;
}

autoキーワードを使うこと、簡単に書けます。

std::vector<int> v;
for(auto it = v.begin(); it != v.end(); ++it) {
	;
}

auto型とポインタ、参照などの扱い

auto型の型推論は、以下のように扱われます。

int	a = 123;
auto*	p = &a;	// int*	p = &a;
auto&	r = a;	// int& r = a;
const auto&	c = a;	// const int& c = a;

autoを用いたループの例

auto は、C++11 で追加されました。

ソースコード auto1.cpp

このプログラムは、std::vector の内容をfor文で表示するだけの例です。

#include <iostream>
#include <vector>
using namespace std;
 
int
main(int argc, char const* argv[])
{
        std::vector<int> v;
        v.push_back (1);
        v.push_back (2);
        v.push_back (3);
        for (auto x: v) {
                cout << x << endl;
        }
        return 0;
}

コンパイル

clang++ -std=c++11  auto1.cpp -o auto1

実行例

Range based for + auto 型の例

C++11からは、forauto型で非常にループが簡単になります。

#include <iostream>
#include <vector>
using namespace std;
 
int
main(int argc, char const* argv[])
{
        std::vector<int> v{1,2,3};
        for (auto x: v) {
                cout << x << endl;
        }
        return 0;
}

C++11のautoが使えないケース

  • 変数宣言時に初期化しない場合です。
  • 引数の型にautoが使えません。
  • 戻り値の型をauto型にできません。

関連項目


スポンサーリンク