после вызова этой функции:

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

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

#include <iostream>

struct stuff
{
        int x;
        stuff(int x_):x(x_){}
        stuff(const stuff & g):x(g.x)
        {
                std::cout<<"copy"<<std::endl;
        }
};   
stuff operator+(const stuff& lhs,const stuff& rhs)
{
        stuff g(lhs.x+rhs.x);
        return g;
}
int main()
{
        stuff a(5),b(7);
        stuff c = a+b;
}

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

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

Ответы на вопрос(8)

Ваш ответ на вопрос