1.逗号操作符可以用于将多个子表达式连接为一个表达式 2.逗号表达式的值为最后一个子表达式的值 3.逗号表达式的前N-1个子表达式可以没有返回值 4.逗号表达式按照从左往右的顺序计算每个子表达式的值
#include <iostream>#include <string>using namespace std;void func(int i){ cout << "func() : i = " << i << endl;}int main(){ int a[3][3] = { (0, 1, 2), (3, 4, 5), (6, 7, 8) };//注意用了括号,所以最终只有2,5,8用来初始化前三个 int i = 0; int j = 0; while( i < 5 ) func(i), i++;//不会死循环 for(i=0; i<3; i++) { for(j=0; j<3; j++) { cout << a[i][j] << endl; } } (i, j) = 6;//最后相当于给j赋值 cout << "i = " << i << endl; cout << "j = " << j << endl; return 0;}输出结果func() : i = 0func() : i = 1func() : i = 2func() : i = 3func() : i = 4258000000i = 3j = 61.在c++中重载逗号操作符是合法的 2.使用全局函数对逗号操作符进行重载 3.重载函数的参数必须有一个是类类型 4.重载函数的返回值类型必须是引用
class Operator , (const class& a, const class& b){ return const_cast<class&>(b);//注意返回的是最后的参数}#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(0); Test t1(1); Test tt = (func(t0), func(t1));// operator , (func(t0),func(t1))参数的计算顺序不确定 cout << tt.value() << endl; // 1 return 0;}输出结果:func() : i = 1func() : i = 01但若把逗号操作符重载函数去掉则会得到正确结果1.c++通过函数调用扩展操作符的功能 2.进入函数体前必须完成所有参数的计算 3.函数参数的计算次序是不定的 4.重载后无法严格从左向右计算表达式
注意:工程中无需重载逗号操作符
1.逗号表达式从左往右顺序计算每个子表达式的值 2.逗号表达式的值为最后一个子表达式的值 3.操作符重载无法完全实现逗号操作符的原生语义 4.工程开发中不要重载逗号操作符
新闻热点
疑难解答