问题1.在c++逗号操作符可以重载吗,重载逗号操作符有意义吗?
答: 在c++中可以重载逗号操作符,在工程开发中不要重载逗号操作符,那是无意义的
下面我们复习下逗号操作符:
1.逗号操作符(,)可以构成逗号表达式
2.逗号表达式用于将多个子表达式连接为一个表达式
3.逗号表达式的值为最后一个表达式的值
4.逗号表达式中的前n-1个子表达式可以没有返回值
5.逗号表达式按照从左向右的顺序计算每个子表达式的值
exp1,exp2,...,exp3
以一个代码例子说明该逗号操作符的特性
#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), // 1.该处赋值啥意思
(3, 4, 5),
(6, 7, 8)
};
int i = 0;
int j = 0;
while( i < 5 )
func(i), // 2.该处会出现死循环吗?
i++;
for(i=0; i<3; i++)
{
for(j=0; j<3; j++)
{
cout << a[i][j] << endl; // 3.该处输出结果是多少
}
}
(i++, j) = 7; // 4.该表达式表示啥意思
cout << "i = " << i << endl;
cout << "j = " << j << endl;
return 0;
}
输出结果如下:
1. (0,1,2) 是个逗号表达式,该句执行完 的值为最后一个表达式的值即为2
int a[3][3] = {
(0, 1, 2), // 1.该处赋值啥意思
(3, 4, 5),
(6, 7, 8)
}; 该函数的赋值其实 等价于 int a[3][3] = {2,,5,8} 所以才有
for(i=0; i<3; i++)
{
for(j=0; j<3; j++)
{
cout << a[i][j] << endl; // 3.该处输出结果是多少
}
}
语句中输出的结果为 2,5,8 ,0,0,0,0,0,0 要想正确的给 int a[3][3]数组赋值应改为
int a[3][3] = {
{0, 1, 2}, // 1.该处赋值啥意思
{3, 4, 5},
{6, 7, 8}
}; 将 () 改为 {}
2. while( i < 5 )
func(i), // 2.该处会出现死循环吗?
i++; 发现其正确打印了 0,1,2,3,4 并没有死循环,原因为 func(i), i++; 为逗号表达式将其连接为了一条语句,故未出现死循环。
3 (i++, j) = 7; // 4.该表达式表示啥意思
该语句执行,1.由逗号表达式的执行顺序知道先执行i++将i变为4 2.由 逗号表达式的值为最后一个表达式的值知道 (i++,j)执行完后该表达式的值为 j 即 (i++, j) = 7; 即将j赋值为7
故看见后面打印为 4,7;