我正在寻找有关以下代码行为的一些解释:
int a = 1;
int b = (4,5,6);
cout<<a+b;
为什么 b 取最后一个值 6 ?
编辑:对不起,我做了一个错误的例子,感谢所有人解释b如何获得值6。
答案 0 :(得分:6)
您的代码无效,但是,如果您将赋值移到声明的单独行中,它将是,并且行为解释如下。逗号运算符具有最低优先级,低于偶数赋值。所以这一行:
a = 1,2,3;
解释如下:
(a = 1),2,3;
虽然这一行的解释完全如下所示:
b = (4,5,6);
逗号运算符会丢弃它的左操作数的结果,因此可以简化为:
b = 6;
答案 1 :(得分:5)
对不起,您的代码在语法上没有效果。
2
和3
应该是声明名称。与c
和d
一样。
要使用逗号运算符,您必须使用括号1, 2, 3
。
我会原谅你这次事故并继续解释。
如果您使用逗号运算符(用作operand1 , operand2
),它将为您提供operand2
的值(或左值)。因此,您将b
初始化为6
(如(4, 5), 6
中所示,因为逗号运算符是左关联的)。
答案 2 :(得分:0)
你为什么要这样做?你打算做什么?变量a一次只能有一个值,并且您尝试将其分配为类似数组。
你可能想要这个:
int[] a = {1,2,3};
int[] b = {4,5,6};
但是,你不能像你想要的那样添加。您必须迭代两个数组并添加它们。
for (int i = 0; i < 3; i++)
{
std::cout << a[i] + b[i];
}
答案 3 :(得分:0)
逗号运算符按从左到右的顺序进行求值,(它定义了一个序列点),其值是最右边的操作数的值。
这解释了b = (4,5,6);
=
的优先级高于,
所以:
a = 1,2,3
相当于:
(a = 1), 2, 3;
整个表达式的值为3
,但指定了1
。
逗号(作为运算符)的使用与声明列表中的使用不同,这就是为什么有人说:
int a = 1, 2, 3;
无效。老实说,我不确定自己,但模糊不是很好的风格。以下是逗号的不同用法:
int a = 1, b = 2, c = 3; // declaration list
和
int a;
a = 1, 2, 3; // a is assigned 3
你的介于两者之间。