2012/10/12

C++の「auto型」について

C++に「auto型」というのがあるらしいです.

調べてみると結構面白そうなもので,コンパイル時に自動で型を推測して適切な型に変換してくれるというものです.

まあ,言葉だけだとあれなので

#include <vector>
#include <iostream>

using namespace std;

int main ()
{
    auto num1 = 10;
    auto num2 = 20;

    auto ans = num1 + num2;

    std::cout << "ans =  " << ans << std::endl;

    getchar();

return 0;
}

とすると,「num1」と「num2」が整数を入れているので「int」と判断され,
「ans」が整数を足しているので「int」と判断されます.

なんか,Pythonみたいな動的言語っぽくて面白いですね.
でも,コンパイル時に型を決定しているっぽいので動的言語とはいろいろ違いますが,

上の例だとメリットが良くわからないのでメリットがもうちょっとわかるやつを次にやります.

まず,「auto」を使わないでやるとこのように書きますが,

#include <vector>
#include <iostream>

using namespace std;

int main ()
{
    vector array;

    for( int i = 0; i < 10; ++i ){
        array.push_back( i );
    }

    for ( vector<int>::iterator it = array.begin(); it != array.end(); it++){
        cout << *it << endl;
    }

    getchar();

return 0;
}

これが,「auto」を使うとこのようになます.

#include <vector>
#include <iostream>

using namespace std;

int main ()
{
    vector array;

    for( int i = 0; i < 10; ++i ){
        array.push_back( i );
    }

    for ( auto it = array.begin(); it != array.end(); it++){
        cout << *it << endl;
    }

    getchar();

return 0;
}

要するにイテレーターのところをきちんと書くんじゃなくて「auto」で代用できるということです.


いいところもあると思いますが,入れる型が違うなどのエラーが出てきたらめんどくさそうですね.

このサイトにいろいろ書いてあります.


C++0xのautoキーワードによる型推論 - ぬいぐるみライフ(仮)
http://d.hatena.ne.jp/mickey24/20110104/1294152403

0 件のコメント:

コメントを投稿