我有以下两行,找不到很好的解释
我确实读过逗号作为运算符和分隔符的双重性质,以及括号的优先级优先级和逗号作为序列点。
int a =(3,4) // here a is 4 because comma here is an operator first a=3 , then a = 4
int a={3,4} // here is the problem , should not a=3 and then a =4 too because comma is a sequence point or it's undefined behavior or what ?
我期望
a=4
a=4 ,
but the actual output is
a=4 , a=3
答案 0 :(得分:5)
在第一种情况下:
int a =(3,4);
使用包含逗号运算符和括号的表达式初始化变量。您正确推测这是分配给a
的内容,该表达式的计算结果为4。
在第二种情况下:
int a={3,4};
使用初始化器列表初始化变量,该列表用大括号表示,逗号分隔初始化器。如果有问题的变量是结构或数组,则初始化器列表中的值将分配给每个成员。如果初始化程序多于成员,则多余的值将被丢弃。
因此,a
被分配了初始化程序列表中的第一个值,即3,而值4被丢弃了。
您这样做吗?
int a[2] = {3, 4};
然后a[0]
将为3,而a[1]
将为4。