Извините за неудобный титул, но я не смог найти лучшего.
Рассмотрим этот пример кода (у него нет цели, кроме иллюстрации вопроса):
#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})
, который, к сожалению, не является законным С++.