Я не могу понять определение RVO (и NRVO )из-за множества вопросов , подобных этому , которые мне посмотрите, предполагая, что RVO опускает конструктор копирования. Теперь, согласно 12.8.15
. В таких случаях реализация рассматривает источник и цель пропущенной операции копирования просто как два разных способа обращения к одному и тому же объекту, и уничтожение этого объекта происходит в более поздний момент времени. когда два объекта были бы уничтожены без оптимизации.
Похоже, что опущен не вызов конструктора копирования, а сама копия -просто объект конструируется в месте "копии" в первую очередь, поэтому нет "исходного" объекта и нет копирования в все. Таким образом, даже если у класса есть конструктор копирования private
, его можно вернуть из функции, когда срабатывает RVO, потому что копии нет.
Я правильно понимаю? Опущено ли само копирование или опущен вызов конструктора копирования? Должен ли быть разрешен возврат объекта из функции, когда класс объекта имеет частный конструктор копии?