【C++】逗号表达式的分析(二维数组初始化时易犯的错误)

来源

https://blog.csdn.net/qq_37375427/article/details/79191078

逗号表达式

逗号操作符,可以构成逗号表达式

  • 逗号表达式用于将多个子表达式连接为一个表达式
  • 逗号表达式的值为最后一个子表达式的值
  • 逗号表达式的前N-1个表达式的值可以没有返回值
  • 逗号表达式按照从左向右的顺序计算每个表达式的值
    exp1,exp2,……,expn-1,expn

下面我们还是以一个例子来说明逗号表达式概念与性质:

#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),  //注意,这里的二维数组的初始化用的是(),而不是{},所以里面的内容构成逗号表达式(0,1,2)的值就为2.
        (3,4,5),  //(3,4,5)的值为5
        (6,7,8)   //(6,7,8)的值为8,所以这个数组实际上,只初始化了前三个数,后面的数全为0;
    };
    int i = 0;
    int j = 0;

    while(i < 5)
        func(i),  /*注意这里是逗号,而不是分号,所以这个表达式等同于{func(i);i++}*/
   		i++;
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
                cout << a[i][j] << endl;
        }
    }
    (i,j) = 6;     //此处给逗号表达式赋值,实际上是给j赋值,而i值不变
    cout << "i = " << i << endl;
    cout << "j = " << j << endl;
    return 0;
}

运行结果

func() : i = 0
func() : i = 1
func() : i = 2
func() : i = 3
func() : i = 4
2
5
8
0
0
0
0
0
0
i = 3
j = 6

总结

  • 逗号表达式从左向右计算子表达式的值
  • 逗号表达式的值为最后一个子表达式的值
  • 操作符重载无法实现逗号操作符的原生语义
  • 工程开发中不要重载逗号操作符

猜你喜欢

转载自blog.csdn.net/vict_wang/article/details/88800469