Копируется объект или нет, когда запускается RVO/NRVO?

Я не могу понять определение RVO (и NRVO )из-за множества вопросов , подобных этому , которые мне посмотрите, предполагая, что RVO опускает конструктор копирования. Теперь, согласно 12.8.15

. В таких случаях реализация рассматривает источник и цель пропущенной операции копирования просто как два разных способа обращения к одному и тому же объекту, и уничтожение этого объекта происходит в более поздний момент времени. когда два объекта были бы уничтожены без оптимизации.

Похоже, что опущен не вызов конструктора копирования, а сама копия -просто объект конструируется в месте "копии" в первую очередь, поэтому нет "исходного" объекта и нет копирования в все. Таким образом, даже если у класса есть конструктор копирования private, его можно вернуть из функции, когда срабатывает RVO, потому что копии нет.

Я правильно понимаю? Опущено ли само копирование или опущен вызов конструктора копирования? Должен ли быть разрешен возврат объекта из функции, когда класс объекта имеет частный конструктор копии?

5
задан Community 23 May 2017 в 12:16
поделиться