rvalue-reference相关内容
我添加了新的运算符重载,以利用c ++ 0x右值引用,我感觉我生成了大量的冗余代码。 我有一个类 tree ,它保存对double值的代数运算的树。下面是一个示例用例: tree x = 1.23; tree y = 8.19; tree z =(x + y)/67.31 - 3.15 * y; ... std :: cout
..
我发布了此答案: http://stackoverflow.com/a/28459180/2642059 其中包含以下代码: void foo(string&& bar){ string * temp =& bar; cout
..
有时,将复杂或长表达式拆分成多个步骤是明智的(例如第二版不是更清楚,但它只是一个例子): return object1(object2(object3(x))); 可写为: object3 a(x); object2 b(a); object1 c(b); return c;假设所有3个类都实现了以值为参数的构造函数,那么第一个版本可能会更快一些,因
..
我一直在测试一些C ++ 11的功能。 我遇到了r值引用和移动构造函数。 我实现了我的第一个移动构造函数,这里是: #include #include using namespace std; class TestClass { public: TestClass(int s): size(s),arr(new in
..
C ++ 11可以根据参考限定词重载成员函数: class Foo { public: void f()& ;; // for when * this is a lvalue void f()&&&& // for when * this is a rvalue }; Foo obj; obj.f(); //调用lvalue overload std ::
..
C ++ 11 std :: move(x)函数根本不移动任何东西。它只是一个转换为r值。为什么这样做? c> std :: move(x) code>只是一个转换为右值 - 更具体地说,是 xvalue ,而不是 prvalue 。还有一个事实,有一个名为 move 的演员有时会让人困惑。 move 可追溯至 2002年的原移动提案。本文首先介绍右值引用,然后说明如何编写更有效的 std
..
我正在编写网络库,并大量使用move语义来处理文件描述符的所有权。我的一个类希望接收其他类型的文件描述符封装,并取得所有权,因此它是像 struct OwnershipReceiver { template void receive_ownership(T& t) { //获取t的文件描述符,清除t } } 它必须处理多个不相关的
..
我不知道如何可以完成以下操作 void f(string& s){ std :: string i(move(s)); / * other stuff * / } int main(){ std :: string s; bind(f,s)(); //错误。 bind(f,move(s))(); //错误。 bind(f,ref(s))(); //错误。 }
..
请考虑以下内容: struct vec { int v [3] vec():v(){}; vec(int x,int y,int z):v {x,y,z} {}; vec(const vec& that)= default; vec& operator =(const vec& that)= default; 〜vec()= default; vec&
..
例如,stdlibc ++具有以下属性: unique_lock& operator =(unique_lock&& __u) { if(_M_owns) unlock(); unique_lock(std :: move(__ u))。swap(* this); __u._M_device = 0; __u._M_owns = false; return * thi
..
我正在阅读Thomas Becker的关于右值引用及其使用的文章。在那里他定义了他所说的 if-it-has-a-name 规则: 声明为右值引用可以是lvalues或 rvalues。区分标准是:如果它有一个名称,那么它是 一个左值。否则,它是一个右值。 这听起来很合理。它还清楚地标识了右值引用的重要性。 我的问题是: 您同意这项规定吗?如果没有,您可以举一个违反此规
..
我想通过 std :: bind 将值传递给在C ++ 0x中使用右值引用的函数。我不知道该怎么做。例如: #include #include template void foo(Type&& value) { Type new_object = std :: forward(valu
..
UPDATE 在底部 q1:如何实现
..
这个程序试图将一个字符串从一个函数中移出,并用于构造另一个字符串: #include #include #include std :: string&& Get_String(void); int main(){ std :: string str {Get_String()}; std ::
..
我一直在看Scott Meyers的在C ++和Beyond 2012会议上讨论通用引用,到目前为止,一切都有意义。然而,观众成员在大约50分钟时问一个问题,我也想知道。 Meyers说他不关心答案,因为它是非惯用的,会愚蠢他的心,但我仍然感兴趣。 代码如下: //重载的典型函数体: void doWork(const Widget& param)// copy { // o
..
这是一个右值引用: void foo(int& 它不绑定到左值: int i = 42; foo(i); // error 这是一个通用参考: template void bar(T& b); 它绑定到右值,它也绑定到左值: bar(i); // okay
..
当函数应返回RValue参考时,是否有原因?一种技术或诀窍,或成语或模式? MyClass&& func(...); 我知道一般返回引用,但有时我们这样做,不是我们( T& T :: operator = (T)只是一个惯用的例子)。但是 T&& func(...)?有没有什么一般的地方,我们会从中获益? 解决方案 有一些情况下,当适当的时候,但它们相对较少。当
..
以下是一些示例代码: #include
..
§3.10第9节说“非类别右值总是具有cv非限定类型”。这使我很奇怪... int foo() { return 5; } const int bar() { 返回5; } void pass_int(int&& i) { std :: cout
..
我只是使用g ++ 4.7(稍后的快照之一)和-std = c ++ 11启用。我试图编译一些我现有的代码库和一个失败的情况有点困惑。 我会感激,如果有人可以解释发生了什么。 以下是代码 #include #include #include #include int main()
..