"int i=1,2,3"和"int i=(1,2,3)"之间的区别 - 使用逗号运算符进行变量声明

4
  1. int i=1,2,3;

  2. int i=(1,2,3);

  3. int i; i=1,2,3;

这些语句有什么区别?我无法找到任何特定的原因。

这三个语句中的逗号具有不同的含义。第一个语句中,逗号是用来分隔变量初始化列表中的值的。这意味着变量i将被初始化为1,然后2和3将被忽略。
第二个语句中,括号内使用的逗号是一个运算符,它在计算时返回最后一个值,因此变量i将被初始化为3。
第三个语句中,逗号被用作顺序运算符,它会按顺序执行所有操作,但只返回最后一个操作的结果,因此变量i将被赋值为3。

请改进您的标题。未来有相同问题的访客将无法找到此问题,因为标题没有传达它在询问什么。(答案:运算符优先级。) - Raymond Chen
3
你真的认为“两个语句之间有什么区别”是一个好标题吗?它们可以是任何两个语句! - Raymond Chen
1
@RaymondChen:Robert 是这个网站的新手,可能甚至不知道那些语句是干什么用的。与其责备某人,不如试着更有建设性地编辑问题,提供一个更具描述性的标题。 - lnafziger
2
@JonathanLeffler 然后尝试 What does 'int x = (anyInt1, anyInt2);' mean? - Raymond Chen
1
更好的重复问题链接是https://dev59.com/RXnZa4cB1Zd3GeqPqnyF。 - phuclv
显示剩余6条评论
2个回答

16
Statement 1 Result : Compile error.
'='运算符的优先级高于','运算符。逗号在这里作为分隔符。编译器创建一个整数变量'i'并将其初始化为'1'。编译器无法创建名为'2'的整数变量,因为'2'不是有效的标识符。
Statement 2 Result: i=3

'()' 运算符的优先级高于 '='。所以,首先计算括号运算符。'()' 运算符从左到右进行操作,但最终得到的结果总是被赋值。


'()' 运算符的优先级高于 '='。所以,首先计算括号运算符。'()' 运算符从左到右进行操作,但最终得到的结果总是被赋值。

Statement 3: Result: i=1
'=' 运算符的优先级高于 ',' 运算符。因此 'i' 被初始化为 '1'。'2' 和 '3' 只是常量表达式,所以没有影响。

3
+1 很好的解释。我将删除我的回答。 - The Mask
我对此表示赞同,它激发了我的思考,并促使我自己尝试。谢谢您的分享。 - NlightNFotis
在第一种情况下,这不是运算符优先级的问题,因为逗号不是运算符。它是声明语法的一部分。 - R.. GitHub STOP HELPING ICE

0

这是逗号运算符

i = a, b, c;            // stores a into i      ... a=5, b=2, c=3, i=5


i = (a, b, c);          // stores c into i      ... a=5, b=2, c=3, i=3

第一行和第二行之间的不同行为是由于逗号运算符比赋值运算符的优先级低。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接