86得票7回答
传值后移的构造是一个糟糕的习惯吗?

由于C++中具有移动语义,现在通常这样做void set_a(A a) { _a = std::move(a); } 如果a是rvalue,推断是复制将被省略,并且只会进行一次移动。 但是如果a是lvalue会发生什么?似乎会进行一个复制构造,然后再进行一个移动赋值(假设A拥有适当的移动赋值...

82得票5回答
一个 RValue 引用返回有什么实际用处吗?

当函数需要返回RValue引用时,是否有特定的原因?这是一种技巧、诀窍、成语或模式吗? MyClass&& func( ... ); 我知道一般情况下返回引用的危险性,但有时我们仍然这样做,不是吗?T& T::operator=(T)只是一个惯用的例子。但是T&a...

77得票4回答
为什么有些人在移动赋值时使用交换(swap)?

例如,stdlibc++拥有以下内容:unique_lock& operator=(unique_lock&& __u) { if(_M_owns) unlock(); unique_lock(std::move(__u)).swap(*...

77得票1回答
使用数字初始化常量引用

以下这行代码的含义是什么? 为什么0作为r-value而不是变量名也可以被接受? 这个声明语句中const关键词的意义是什么?const int &x = 0;

76得票6回答
rvalue引用作为参数的正确用法

让我们以以下方法为例:void Asset::Load( const std::string& path ) { // complicated method.... } 一般使用该方法的步骤如下:Asset exampleAsset; exampleAsset.Load("im...

71得票1回答
对象、右值引用和常量引用之间的重载决策

考虑到这三个函数,这个调用是模棱两可的。 int f( int ); int f( int && ); int f( int const & ); int q = f( 3 ); 移除 f( int ) 会导致Clang和GCC都优先选择rvalue引用而不是l...

67得票1回答
无法使用'rvalue references to *this'功能的解决方法

我有一个代理容器类封装了一个可移动对象,并希望代理能够在自身被移动时隐式返回基础对象的右值引用。 我相信我可以按照n2439提案"将移动语义扩展到*this"来实现此行为,但它在gcc的发布版本中尚不可用,而且可能要等一段时间。 下面的代码是我最终的目标,但目前还不可能。在此功能可用之前,...

66得票2回答
我能把这句话翻译成中文:我通常/总是可以使用std::forward代替std::move吗?

我一直在观看Scott Meyers在C++ and Beyond 2012会议上的通用引用演讲,到目前为止一切都很清晰。然而,在大约50分钟左右,一个观众提出了一个问题,这也是我想知道的。Meyers说他不关心答案,因为这是非成语化的,会让他感到愚蠢,但我仍然很感兴趣。 所呈现的代码如下:...

52得票2回答
为什么用户定义的移动构造函数会禁用隐式的复制构造函数?

我正在阅读boost/shared_ptr.hpp文件时,看到了以下代码:// generated copy constructor, destructor are fine... #if defined( BOOST_HAS_RVALUE_REFS ) // ... except in...

51得票1回答
引用过载与仅传值+std::move相比如何?

据看来,关于C++0x的rvalue的主要建议是在类中添加移动构造函数和移动赋值运算符,直到编译器自动实现它们。 但如果你使用VC10,等待不是一个明智的策略,因为自动生成可能要等到VC10 SP1,或者在最坏情况下,VC11。很可能,等待这一点将需要数年时间。 这就是我的问题所在。编写所...