В C++ 11, я могу перебрать некоторый контейнер таким образом:C++ 11 Range основы для цикла эффективность «Const авто и я» против «авто я»
for(auto i : vec){
std::cout << i << std::endl;
}
Но я знаю, что это излишне - понапрасну, так как мне нужно только печати значения vec
- делает копию (EDIT: каждый элемент) vec
, поэтому вместо того, чтобы я мог сделать:
for(auto &i : vec){
std::cout << i << std::endl;
}
Но я хочу, чтобы убедиться, что значения vec
никогда не изменяются и соблюдать сопзЬ корректности, так что я могу сделать:
for(const auto &i : vec){
std::cout << i << std::endl;
}
Так что мой вопрос: если мне нужно только взгляд в то значения какого-либо контейнера, не всегда был бы самый последний цикл (const auto &i
) из-за повышенной эффективности отсутствия дополнительной копии (EDIT: каждый элемент) vec
?
У меня есть программа, которую я разрабатываю, в которой я планирую сделать это изменение повсюду, поскольку эффективность в нем важна (причина, по которой я использую C++ в первом месте).
Да, если вам нужен только доступ для чтения к аргументу, это должно быть через 'auto const &', чтобы избежать ненужной копии. – 0x499602D2
Ключевое слово «const» не делает ваш код более быстрым, хотя ... – Tim
'for (auto i: vec)' не делает дополнительной копии всего 'vec', он копирует каждый _element_' vec' в 'i'. – Casey