for循环中的意外行为
Unexpected behaviour in a for loop
编译并运行,但为"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;
}
逗号操作符表示执行左边的表达式然后执行右边的表达式:
a, b=0
首先执行不执行任何操作的a
,然后执行将0赋值给b的b=0
。
为什么存在逗号操作符?当表达式有副作用时,逗号操作符很有用。
还充当了一个序列点,告诉编译器"左边的所有内容必须在右边的任何内容发生之前完成"。这限制了编译器允许的优化,因此例如a += 1, b = a + c[a]总是在将a用作索引之前向a添加1。像b = ++a + c[a]这样的东西是未定义的,因为编译器可以在使用a作为索引之前或之后增加a。
相关文章:
- 如何循环打印顶点结构
- 如何在C++中从两个单独的for循环中添加两个数组
- C++我的数学有什么问题,为什么我的代码不能正确循环
- c++ 中 while 循环的意外行为
- 为什么我在循环提升时得到意外的索引::hana::元组
- 在 winapi 回调函数上返回 FALSE 时出现意外行为(循环被跳过?
- 如果在循环中给cin一个意外的输入,则会自动输入C++换行符作为输入
- C++ 循环意外结束
- 循环间隔意外更改
- For循环内特定行的意外迭代
- C++ 子类和运算符=:无限循环和意外调用
- Arduino UNO在执行更复杂的程序时意外循环Serial
- 当循环意外终止时(C/C++)
- 简单的 C++ for 循环意外输出
- for循环中的意外行为
- 一次执行后,嵌套for循环出现意外/未见的中断:高斯消去
- 使用if循环排序时出现意外结果-糟糕的算法
- 使用循环和函数向映射中插入值时的意外行为
- c++中循环字符时的意外结果
- 循环依赖c意外错误或只是一个糟糕的设计