1. ホーム
  2. c++

[解決済み] C++のSTLでautoキーワードを使用する

2022-03-05 14:28:58

質問

vectorを使用したコードを見たことがあります。

vector<int>s;
s.push_back(11);
s.push_back(22);
s.push_back(33);
s.push_back(55);
for (vector<int>::iterator it = s.begin(); it!=s.end(); it++) {
    cout << *it << endl;
}

と同じです。

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

この場合、autoキーワードの使用はどの程度安全なのでしょうか?また、ベクターの型が float ? string ?

解決方法は?

その オート キーワードは、初期化から変数の型を推測するようにコンパイラに要求するだけです。

C++0x以前のコンパイラでも、(初期化)式の型はわかっているし、エラーメッセージでその型を確認できることが多くなっています。

#include <vector>
#include <iostream>
using namespace std;

int main()
{
    vector<int>s;
    s.push_back(11);
    s.push_back(22);
    s.push_back(33);
    s.push_back(55);
    for (int it=s.begin();it!=s.end();it++){
        cout<<*it<<endl;
    }
}

Line 12: error: cannot convert '__gnu_debug::_Safe_iterator<__gnu_cxx::__normal_iterator<int*, __gnu_norm::vector<int, std::allocator<int> > >, __gnu_debug_def::vector<int, std::allocator<int> > >' to 'int' in initialization

オート キーワードは、単にこの知識を利用することを可能にします - あなた(コンパイラ)が正しい型を知っているなら、私のために選んでくれるだけでいいのです!