设为首页 加入收藏

TOP

8.5.3 命名的对象是lvalue(3)
2013-10-07 16:09:17 来源: 作者: 【 】 浏览:67
Tags:8.5.3 命名 对象 lvalue

8.5.3  命名的对象是lvalue(3)

如果有办法在CMessage类的移动赋值和移动构造函数中强制aMess.text成为一个rvalue,就可以修复这些效率低下的问题。C++(www.cppentry.com)库中的utility头文件特意提供了std::move()函数,它所完成的工作完全符合我们的期望。此函数返回作为rvalue传递给它的任何实参。可以像下面这样更改CMessage移动构造函数:

  1. CMessage(CMessage&& aMess)  
  2. {  
  3. cout << "CMessage move constructor called." << endl;  
  4. text = std::move(aMess.text);  
  5. }  

现在,赋值语句右边是一个rvalue,此语句设置新对象的文本成员,所以调用CText类中的移动赋值运算符函数,而不是复制赋值运算符函数。

可以用相似的方式修改移动赋值运算符函数:

  1. CMessage& operator=(CMessage&& aMess)  
  2. {  
  3. cout << "CMessage move assignment operator function called." << endl;  
  4. text = std::move(aMess.text);  
  5. return *this;                        // Return a reference to 1st operand  
  6. }  

std::move()函数在utility头文件中声明,所以需要在此示例中添加它的#include指令。如果重新编译程序并再次执行它,则从输出可以看到,已经修改的两个函数调用了CText移动赋值运算符函数。在类中实现构造函数和赋值运算符函数以便它们使用std::move()函数被称为移动语义。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇8.5.3 命名的对象是lvalue(2) 下一篇8.6 默认的类成员

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·python数据分析岗的 (2025-12-25 10:02:21)
·python做数据分析需 (2025-12-25 10:02:19)
·成为一个优秀的pytho (2025-12-25 10:02:16)
·Java后端面试实习自 (2025-12-25 09:24:21)
·Java LTS版本有哪些 (2025-12-25 09:24:18)