1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

autoキーワードについて調べて見た

Last updated at Posted at 2018-12-23

#はじめに
C++でコードを書き始めて、早半年が経ちました。
先日、autoキーワードというものに初めて出会い、勉強したので記事にしてみたいと思います。
#環境
OS: macOS High Sierra ver10.13.6
Xcode: Version 10.1
言語: C++
#autoキーワードについて簡単に説明
autoキーワードはC++ 11以降で使用することができるモノで、変数の型を初期化している値から自動的に推察してくれます。普通に変数を宣言する場合、int i = 1;のように「この変数名は、int型で扱いますよ!」と明示的にする必要があります。

しかし、auto i = 1;とすると自動的に判断されiをint型として扱うことが出来ます。([詳しくはここを参照] (https://cpprefjp.github.io/lang/cpp11/auto.html))
#基本動作
さて、もう少し詳しく動作を見ていきましょう。

  • 数値を格納した変数のsizeを見てみる
main.cpp
int main(void) {
    auto i = 1.2;
    int i_size = sizeof(i) / sizeof(double);
    std::cout << i << " is byte-size = " << i_size << std::endl;
    
    std::cout << "------" << std::endl;
    
    auto o = 23;
    int o_size = sizeof(o) / sizeof(int);
    std::cout << o << " is byte-size = " << o_size << std::endl;
    
    return 0;
}
実行結果
1.2 is byte-size = 1
------
23 is byte-size = 1

autoキーワードの推論で設定した変数ですが、ちゃんと想定した型になっているようですね。
iはint型に、oはdouble型に。

  • 文字列を格納した変数のsizeを見てみる
main.cpp
#include <iostream>
#include <stdio.h>
int main(void) {
    auto str = "test";
    int str_size = sizeof(str) / sizeof(const char*);
    std::cout << str << " is byte-size = " << str_size << std::endl;
    
    return 0;
}
実行結果
test is byte-size = 1

"test"はconst char*に暗黙的に型変換されるようになっているのですが、それもしっかり出来ている。

#どんなタイミングで使えるの?
今まで見て来ていただいた例だといまいち有用性がわかりにくいかと思います。
autoキーワードは、書くのが面倒なイテレーションの代わりを果たしてくれます。
(2018/12/25: 追記)
こちら間違いだったようです。正確には、「イテレーションを記述しなくてはいけない場面でも、推論をしてくれる」です。

main.cpp
#include <vector>
#include <iostream>
#include <iostream>
#include <stdio.h>

using namespace std;
int main ()
{
    vector<int> tag;
    
    for( int i = 0; i < 10; ++i ){
        tag.push_back( i );
    }
    vector<int>::iterator start = tag.begin();
    std::cout << *start << std::endl;
    
    return 0;
}

上のCodeをautoキーワードを使用すると、、、。

cpp.main.cpp
#include <vector>
#include <iostream>
#include <iostream>
#include <stdio.h>

using namespace std;
int main ()
{
    vector<int> tag;
    
    for( int i = 0; i < 10; ++i ){
        tag.push_back( i );
    }
    auto start = tag.begin();
    std::cout << *start << std::endl;
    
    return 0;
}

このように少しスッキリ書くことができるようになります!

#まとめ

  • autoキーワードは、初期化値で推論して変数の型を決定してくれる
  • 最大の特徴は、イテレーションでも推論をして適切なモノにしてくれること

記事化出来ないくらいの小ネタは、blogの方で情報発信していこうと思ってます!
[私のBlog] (https://hmon-k.hatenablog.com/)
ぜひ、そちらの方もよろしくお願いします。

1
1
7

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?