Рассмотрим следующий код в С++:
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), возврат значения (6.6.3), преобразование, которое создает prvalue (4.1, 5.2.9, 5.2.11, 5.4), бросая исключение (15.1), вводя обработчик (15.3) и в некоторые инициализации (8.5).
Таким образом, оператор return снова создает временный объект?
Кстати, может ли кто-нибудь сказать мне, гарантирует ли стандарт неявное преобразование типа временного объекта?