Какую оптимизацию обеспечивает семантика перемещения, если у нас уже есть RVO?

Насколько я понимаю, одной из целей добавления семантики перемещения является оптимизация кода путем вызова специального конструктора для копирования «временных» объектов. Например, в ответе мы видим, что его можно использовать для оптимизации такой строки a = x + y . Поскольку x + y является выражением rvalue, вместо глубокого копирования мы можем скопировать только указатель на строку и размер строки. Но, как известно, современные компиляторы поддерживают оптимизацию возвращаемого значения , поэтому без использования семантики перемещения наш код вообще не будет вызывать конструктор копирования.

Чтобы доказать это, я пишу этот код:

#include 

struct stuff
{
        int x;
        stuff(int x_):x(x_){}
        stuff(const stuff & g):x(g.x)
        {
                std::cout<<"copy"<

И после его выполнения в VC + +2010 и g ++ в режиме оптимизации получаю пустой вывод.

Что это за оптимизация, если без нее мой код все равно работает быстрее? Не могли бы вы объяснить, что я неправильно понимаю?

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