☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

表达式求值依赖无确定顺序的副作用

C++-Undefined-Behavior-28
目录 › next › previous

示例:

int a = 0;
int b = a + a++;    // Undefined behavior

例中加法运算符左右子表达式无明确的求值顺序,如果左子表达式先求值,b 的值是 0,如果右子表达式先求值,b 的值可能是 1 也可能是 0,因为 a++ 的值是 0,但 a++ 的副作用在表达式求值过程中何时生效也是不确定的。

又如:

volatile int* p = foo();
int n = *p + *p;          // Undefined behavior

例中 n 的值在数学上应是 *p 的二倍,但由于 p 指向 volatile 数据,结果可能不符合预期的数学关系。

依据

ISO/IEC 14882:2003 5(4)-undefined

规则

ID_evaluationOrderReliance ID_confusingAssignment
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.