Используйте ключевое слово auto в C ++ STL

Я видел код, использующий вектор,

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 ?

37
задан Peter Mortensen 27 September 2010 в 22:27
поделиться

3 ответа

Ключевое слово auto просто просит компилятор определить тип переменной на основе инициализации.

Даже компилятор до 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

Ключевое слово auto просто позволяет вам воспользоваться этим знанием - если вы (компилятор) знаете правильный тип, просто выберите его за меня!

46
ответ дан 27 November 2019 в 04:14
поделиться

Ключевое слово auto получает тип из выражения справа от =. Следовательно, он будет работать с любым типом, единственное требование - инициализировать автоматическую переменную при ее объявлении, чтобы компилятор мог определить тип.

Примеры:

auto a = 0.0f;  // a is float
auto b = std::vector<int>();  // b is std::vector<int>()

MyType foo()  { return MyType(); }

auto c = foo();  // c is MyType
13
ответ дан 27 November 2019 в 04:14
поделиться
Ключевое слово

auto предназначено для использования в такой ситуации, оно абсолютно безопасно. Но, к сожалению, оно доступно только в C++0x, поэтому у вас возникнут проблемы с его переносимостью.

3
ответ дан 27 November 2019 в 04:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: