Он может быть вызван один раз, может быть вызван size+1
раз или вообще никогда не может быть вызван.Предполагая, что размер вектора не меняется, ваша программа будет вести себя , как если бы она была вызвана size+1
раз.
Здесь есть две оптимизации: во-первых, std::vector::size()
вероятно, встроенный, так что его никогда не могут вообще «назвать» в традиционном смысле.Во-вторых, компилятор может определить, что он оценивает size()
только один раз или, возможно, никогда:
Например, этот код может никогда не вычислять std::vector::size()
:
for(int i = 0; i < myVector.size(); ++i) { ; }
Любой из этих цикловможет оценить std::vector::size()
только один раз:
for(int i = 0; i < myVector.size(); ++i) { std::cout << "Hello, world.\n"; }
for(int i = 0; i < myVector.size(); ++i) { sum += myVector[i]; }
Хотя этот цикл может оценивать std::vector::size()
много раз:
for(int i = 0; i < myVector.size(); ++i) { ExternalFunction(&myVector); }
В конечном итоге ключевыми вопросами являются:
- Почему вас это волнует? И
- Откуда вы знаете?
Почему вас волнует, сколько раз вызывается size()
?Вы пытаетесь заставить вашу программу работать быстрее?
Как бы вы узнали?Так как size()
не имеет видимых побочных эффектов, как вы узнаете, кто его много раз вызывал (или оценивал иначе)?