重载逗号操作符
  • 逗号操作符算法:从左到右依次计算每一个表达式的值,整个逗号表达式的值等于最右边表达式的值,前面n-1个表达式可以没有返回值

  • 重载逗号操作符:

    • 参数必须有一个class成员

    • 重载函数返回值类型必须是引用

    • 使用全局函数对逗号操作符进行重载

  • 不建议重载逗号操作符:不能实现左到右依次计算每一个表达式的值,重载之后为随机顺序,原因如下:

    • 重载逗号操作符的本质是函数调用

    • 进行函数调用之前,需要先计算出所有参数的值,且顺序是随机的

  • 不重载逗号操作符也可以进行逗号运算

  • 结论:不建议重载逗号操作符

 #include <iostream>
#include <string> using namespace std; class Test
{
int mValue;
public:
Test(int i)
{
mValue = i;
}
int value()
{
return mValue;
}
}; Test& operator , (const Test& a, const Test& b)
{
return const_cast<Test&>(b);
} Test func(Test& i)
{
cout << "func() : i = " << i.value() << endl;
return i;
} int main()
{
Test t0();
Test t1();
Test tt = (func(t0), func(t1)); // 逗号重载函数,入参时采用从右向左调用。违反了逗号操作符的从左往右运行的语义。
cout << tt.value() << endl; // 1
return ;
}

最新文章

  1. Kafka无消息丢失配置
  2. Java selenium web页面的滚动条操作
  3. os.walk()
  4. jquery中的$(document).ready()、JavaScript中的window.onload()以及body中的onload()的区别
  5. PHP读写文件高并发处理实例-转
  6. 【转】 SIFT算法详解
  7. PowerDesigner(二)-项目和框架矩阵(转)
  8. iOS-CALayer遮罩效果
  9. Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决--转载
  10. Entity Framework 6.1-Code First
  11. CSS溢出文本省略(text-overflow)
  12. Dom4j 学习笔记
  13. 程序中使用7-zip(7z)压缩文件
  14. Linux系统(四)负载均衡LVS集群之NAT模式
  15. HTML5基本标签的使用
  16. postgreSQL可视化工具pgAdmin3 导入表结构和数据
  17. bottle模板中的替换
  18. Go语言之进阶篇获取文件属性
  19. Groupnet, Subnet, IP Pool的概念
  20. 如何将一个Winform嵌入到一个Control当中

热门文章

  1. Git配置仓库的用户名邮箱
  2. IDEA+Maven+Tomcat构建Web项目的三种方法
  3. 图解 Git 基本命令 merge 和 rebase
  4. java 基础 流程控制
  5. 一条update SQL语句是如何执行的
  6. 微信小程序之页面跳转(tabbar跳转及页面内跳转)
  7. Pytorch入门——手把手带你配置云服务器环境
  8. 暑假集训Day2 互不侵犯(状压dp)
  9. actuator与spring-boot-admin 可以说的秘密
  10. CentOS 7 Docker安装部署Go Web