Извините за неудобный титул, но я не смог найти лучшего.
Рассмотрим этот пример кода (у него нет цели, кроме иллюстрации вопроса):
#include <vector>
void FooBar(int);
void func1()
{
static std::vector<int> vec {1, 2, 3, 4};
for (auto & v : vec)
FooBar(v);
}
void func2()
{
for (auto & v : std::vector<int> {1, 2, 3, 4})
FooBar(v);
}
Демонтаж этого можно найти здесь
В func1 статический vec вектор предполагается построить раз и навсегда при запуске. На самом деле демонтаж на godbolt, упомянутый выше, показывает, что инициализация статического vec выполняется только при первом вызове func1, а не при запуске, но это не точка здесь.
Теперь рассмотрим func2: здесь вектор прямо объявлен "inline" (не уверен, как это фактически вызывается) внутри оператора for, но, конечно, этот вектор создается каждый раз, когда вызывается func2.
Есть ли способ объявить этот вектор статически и внутри оператора for, например for (auto & v : static std::vector<int> { 1, 2, 3, 4}), который, к сожалению, не является законным С++.