Иногда.Забавно, что вы спросите, потому что что-то, о чем я неправильно вспомнил о volatile
(о котором говорил Иоганн), заставило меня посмотреть именно на такие мелочи.в операторе return в функции с типом возврата класса, когда выражение является именем энергонезависимого автоматического объекта с тем же типом cv-unqualified, что и тип возврата функции, операция копирования может быть опущена путем создания автоматического объектанепосредственно в возвращаемое значение функции
Итак, все в порядке, чтобы исключить доступ volatile
путем исключения конструктора, но только если объект whole является энергозависимым.
Кроме того, он может изменить ситуацию, если функция вернет volatile foo
по значению , в отличие от простого foo
, потому что конструкция временного временного элемента не может быть исключена!
foo factory_a(); // return class by value
const foo factory_b(); // also return by value: rather pointless
volatile foo factory_c(); // implies no elision
Обратите внимание, что квалификация cv возвращенного временного объекта также влияет на семантику доступа временного объекта, например, factory_b().non_const_method()
недопустимо.Так что это все более загадочно, чем с головой.