zoukankan      html  css  js  c++  java
  • C++语法小记---重载逗号操作符

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

    • 重载逗号操作符:

      • 参数必须有一个class成员

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

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

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

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

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

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

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

     1 #include <iostream>
     2 #include <string>
     3 
     4 using namespace std;
     5 
     6 class Test
     7 {
     8     int mValue;
     9 public:
    10     Test(int i)
    11     {
    12         mValue = i;
    13     }
    14     int value()
    15     {
    16         return mValue;
    17     }
    18 };
    19 
    20 Test& operator , (const Test& a, const Test& b)
    21 {
    22     return const_cast<Test&>(b);
    23 }
    24 
    25 Test func(Test& i)
    26 {
    27     cout << "func() : i = " << i.value() << endl;
    28     return i;
    29 }
    30 
    31 int main()
    32 {   
    33     Test t0(0);
    34     Test t1(1);
    35     Test tt = (func(t0), func(t1));       //  逗号重载函数,入参时采用从右向左调用。违反了逗号操作符的从左往右运行的语义。  
    36     cout << tt.value() << endl; // 1   
    37     return 0;
    38 }
  • 相关阅读:
    P2486 [SDOI2011]染色 (树链剖分)
    机房测试:Dove打扑克(vector暴力)
    机房测试:sort(归并+概率期望dp)
    区间覆盖问题总结(贪心)
    机房测试:停不下来的团长奥加尔(dp)
    博客目录
    团队作业week16
    Beta阶段项目展示
    Beta阶段项目终审报告
    Beta阶段测试报告
  • 原文地址:https://www.cnblogs.com/chusiyong/p/11295329.html
Copyright © 2011-2022 走看看