Следующий код строит, компилирует и запускает (C++, mingw), казалось бы, без проблем. Тем не менее, я уверен, что объекты, созданные с помощью списков инициализаторов внутри списка параметров функции, живут в рамках этой функции, хотя функция принимает аргумент по ссылке?
Если нет, верно ли, что при создании объекта с использованием его списка инициализаций в списке параметров функции (который принимает аргумент по ссылке) может быть опасным, поскольку он сразу будет разрушен: в этом случае функция не имеет копия, но ссылка на память, которая может или не может быть перераспределена другим процессом?
struct S
{
S() : a(0), b(0) {}
S(int a, int b) : a(a), b(b) {}
int a;
int b;
};
void foo(const S& s)
{
std::cout << "s.a = " << s.a << std::endl;
std::cout << "s.b = " << s.b << std::endl;
}
int main()
{
foo({4,5}); // <-- What is the scope of the struct initialized here?
return 0;
}