同一表达式中变量的赋值和使用
Variable assignment and usage in the same expression
我遇到一行代码:
int a = 10;
int b = 40;
a = a + b - (b = a);
cout << a << " " << b << endl;
我不明白这段代码中发生了什么。有人能给我解释一下吗?
未定义行为。b
的值改为和,用于计算,没有中间序列点。程序的结果是不可预测的——它可以打印任何东西或崩溃,或者做一些讨厌的系统调用。
除特别说明外,单个操作数的求值顺序单个表达式的操作符和子表达式,以及顺序在哪种药物中会产生副作用,目前还不清楚一个标量对象的前一个和下一个序列点应该有其存储由表达式求值最多修改一次的值。而且,访问先验值只能是为了确定要存储的值。应满足本款的要求的子表达式的每个允许排序的表情;否则行为为undefined
未定义行为
http://en.wikipedia.org/wiki/Sequence_point这是未定义的行为,因为变量b已被修改,然后在同一表达式中使用,因此最终结果是不明确的,因为它取决于表达式求值的顺序。(b=a)
可以在b变量计算a+b
之前或之后发生
相关文章:
- 为"adjacent"变量赋值时出现问题
- 非常量变量只读位置的赋值
- 变量在使用赋值语句赋值后恢复为以前的值
- 为什么我不能在返回 const 的布尔函数中为类成员变量赋值?C++
- 如何在 c++ 中正确声明/赋值变量的值
- 在未初始化的变量上使用复合赋值运算符(+=, ..)不是C++中的UB?
- c++问题:给一个变量赋值后,另一个变量发生了变化
- 如何在不使用赋值运算符的情况下为动态变量赋值?
- 为什么我不能为变量赋值函数?
- 可视化的c++变量赋值使代码正常工作
- 作为赋值(增加引用变量)C++的左操作数所需的左值
- 如何为结构类型变量赋值
- const变量是否可以在具有默认值的参数中赋值(作为可选参数)
- C++中重载复合赋值运算符不会更改变量
- 初始值设定项列表与构造函数赋值与变量定义
- 在结构的构造函数中使用类方法赋值变量
- 原子变量的多重赋值是原子操作吗?
- 在 If 语句 [C++] 中赋值变量
- 赋值变量时c++未处理异常访问冲突
- 使用reinterpret_cast赋值变量后可能的析构函数