这会编译并运行,但会为" a"生成垃圾值。为什么不" a"像" b"?为什么要生产垃圾?
for(a,b=0; a,b != 55; a,b++)
{
//outputs garbage
std::cout << "a = " << a << std::endl;
//outputs expected results
std::cout << "b = " << b << std::endl;
}
编辑: 尽管另一个问题有一个同样有效的答案,但我觉得这个问题是不同的。我无法找到基于语义的各种措辞,我想知道它为什么不能用c ++工作,而不是如何使输出工作。
答案 0 :(得分:4)
逗号运算符表示执行左侧的表达式然后执行右侧的表达式:
a, b=0
首先执行a
,它不执行任何操作,然后执行b=0
,为b分配零。
为什么逗号运算符存在?当表达式有副作用时,逗号运算符很有用。
它还提供一个序列点,告诉编译器&#34;左边的所有内容必须在右边的任何内容发生之前完成。这限制了编译器允许的优化,因此例如a + = 1,b = a + c [a]将总是在将其用作索引之前添加一个。像b = ++ a + c [a]这样的东西是未定义的,因为编译器可以在将它用作索引之前或之后递增a。