Рассмотрим следующий код на C++:
struct A {A(int);};
A foo() {return static_cast<A>(0);}
A x = foo();
Здесь static_cast<A>(0)
создает временный объект по стандарту [5.2.9-4], который является prvalue. Стандарт [12.2-1] говорит
Временные типы класса создаются в различных контекстах: привязка ссылки к prvalue (8.5.3), возврат prvalue (6.6.3), преобразование, создающее prvalue (4.1, 5.2.9 , 5.2.11, 5.4), генерация исключения (15.1), вход в обработчик (15.3) и при некоторых инициализациях (8.5).
Итак, оператор return снова создает временный объект?
Кстати, кто-нибудь может сказать мне, гарантирует ли стандарт, что неявное преобразование типов создаст временный объект?