相关疑难解决方法(0)

什么是移动语义?

我刚刚听完了Scott Meyers关于C++ 0x的软件工程电台播客采访.大多数新功能对我来说都很有意义,我现在对C++ 0x感到兴奋,除了一个.我仍然没有得到移动语义 ......它们究竟是什么?

c++ c++-faq move-semantics c++11

1614
推荐指数
11
解决办法
39万
查看次数

c ++ 11返回值优化还是移动?

我不明白何时应该使用std::move,何时应该让编译器优化...例如:

using SerialBuffer = vector< unsigned char >;

// let compiler optimize it
SerialBuffer read( size_t size ) const
{
    SerialBuffer buffer( size );
    read( begin( buffer ), end( buffer ) );
    // Return Value Optimization
    return buffer;
}

// explicit move
SerialBuffer read( size_t size ) const
{
    SerialBuffer buffer( size );
    read( begin( buffer ), end( buffer ) );
    return move( buffer );
}
Run Code Online (Sandbox Code Playgroud)

我应该使用哪个?

c++ move return-value-optimization rvo c++11

166
推荐指数
4
解决办法
8万
查看次数

C++ ABI如何处理RVO和NRVO?

我很困惑与问候如何编译和链接处理的事实,在电话会议上要求ER功能的依靠,如果函数使用静脉阻塞或NRVO不同.

这可能是我的误解,但我的假设是通常没有RVO或NRVO

std::string s = get_string();
Run Code Online (Sandbox Code Playgroud)

如果get_string不执行N?RVO但是如果get_string执行N?RVO调用代码什么也不做,并且s由函数get_string构造到位,则涉及从get_string的结果移动构造s .

编辑:这是我如何设想get_string调用程序操作,如果没有N?RVO:

  1. 调用get_string()
  2. get_string结果现在在堆栈上,调用者使用它来构造s

现在还有RVO

  1. 调用get_string()
  2. 当get_string完成时,堆栈上没有结果,get_string构造为s,调用者不需要做任何事情来构造s.

c++ abi rvo nrvo

5
推荐指数
1
解决办法
394
查看次数