分配值的顺序

时间:2011-12-13 18:10:39

标签: c++

我正在寻找有关以下代码行为的一些解释:

int a = 1;
int b = (4,5,6);
cout<<a+b;

为什么 b 取最后一个值 6

编辑:对不起,我做了一个错误的例子,感谢所有人解释b如何获得值6。

4 个答案:

答案 0 :(得分:6)

您的代码无效,但是,如果您将赋值移到声明的单独行中,它将是,并且行为解释如下。逗号运算符具有最低优先级,低于偶数赋值。所以这一行:

a = 1,2,3;

解释如下:

(a = 1),2,3;

虽然这一行的解释完全如下所示:

b = (4,5,6);

逗号运算符会丢弃它的左操作数的结果,因此可以简化为:

b = 6;

答案 1 :(得分:5)

对不起,您的代码在语法上没有效果。

23应该是声明名称。与cd一样。

要使用逗号运算符,您必须使用括号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

你的介于两者之间。