相关疑难解决方法(0)

如果我们已经拥有RVO,那么移动语义会提供什么优化?

据我所知,添加移动语义的目的之一是通过调用特殊构造函数来复制"临时"对象来优化代码.例如,在这个答案中我们看到它可以用来优化这些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;
}
Run Code Online (Sandbox Code Playgroud)

在VC++ 2010中执行它并在优化模式下执行g ++后,我得到空输出.

它是什么样的优化,如果没有它,我的代码仍然可以更快地运行?你能解释一下我的理解错误吗?

c++ optimization move-semantics c++11

32
推荐指数
3
解决办法
5285
查看次数

标签 统计

c++ ×1

c++11 ×1

move-semantics ×1

optimization ×1