мне было интересно ... есть ли реальная разница между:для (авто и указатель: vectorOfPointers) против (авто для указателя: vectorOfPointers)
for(auto &pointer : vectorOfPointers){pointer->fun();}
и
for(auto pointer : vectorOfPointers){pointer->fun();}
где vectorOfPointers
объявляется простым vector
нормальных указателей старой школы:
std::vector<SomeType *> vectorOfPointers;
?
Я знаю, что &
в for(auto &o : objects)
стоит для справки, в то время как for(auto o : objects)
является цикл по значениям. Но «значения» в моих примерах сами указатели - я могу получить доступ к объектам, к которым они указывают, и изменять их с помощью обоих циклов.
Итак, есть ли разница? Если «не совсем» (как в использовании, так и в том, что компилятор будет генерировать из них), возможно, один из этих двух вариантов является широко используемым/утвержденным?
Не позволяйте добавить умные указатели на эту дискуссию, меня интересует именно точная ситуация.
Я помню, как Стефан Т. Лававей из Microsoft упоминал в разговоре о конференции, что второй вариант - преждевременная пессимизация. По его словам, цикл by-value всегда медленнее, даже для контейнеров 'int'. К сожалению, я не на 100% уверен, что это было так, поэтому на данный момент ссылки на эту цитату :( – ComicSansMS
@ComicSansMS это совсем новая информация для меня, спасибо. Ps Я люблю твой ник. – PolGraphic