此增量后语句是否会导致未定义的行为?
Does this post-increment statement result in undefined behaviour?
使用较新版本的GCC构建程序时,我发现代码中存在问题。
count[i] = count[i]++;
此代码适用于较旧版本的 GCC (2.95(,但不适用于较新版本 (4.8(。
所以我怀疑这种说法会导致未定义的行为,我说得对吗?还是有更好的术语来解决这个问题?
这实际上被指定为未定义的行为,因为每个编译器都定义了自己的操作顺序,如: https://en.cppreference.com/w/cpp/language/eval_order
未指定几乎所有C++运算符的操作数的计算顺序(包括函数调用表达式中函数参数的计算顺序和任何表达式中子表达式的计算顺序(。编译器可以按任意顺序计算操作数,并且可以在再次计算同一表达式时选择其他顺序。
在cpp首选项的递增/递减页面上实际上有一个警告:https://en.cppreference.com/w/cpp/language/operator_incdec
由于涉及的副作用,必须谨慎使用内置的递增和递减运算符,以避免由于违反排序规则而导致的未定义行为。
事实上,这是未定义的行为。
int i = 2;
i = i++; // is i assigned to be 2 or 3?
相关文章:
- 编译C++时未定义的引用
- vscode g++链路故障:体系结构x86_64的未定义符号
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 不知道某个东西是否被忽略会引入未定义的行为吗
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 未定义的引用在哪里
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 对Py_Initialize()的未定义引用
- c++11评估顺序(未定义的行为)
- 使用mysql c++连接器的未定义引用
- 从python调用openMP共享库时,未定义opnMP函数
- 在 Mac 上使用 CMAKE 将 FFTW 和 FFTWPP 链接到项目中时未定义的符号
- Cmake 链接问题:未定义对 Button::mousePressEvent(QGraphicsSceneMouseE
- 此增量后语句是否会导致未定义的行为?
- 当C/C++程序切换语句转到未定义的大小写并且缺少默认值时,它的正确行为是什么:
- 为什么if语句中未定义的参数不会导致segfault或其他错误
- 在switch语句中初始化时未定义的变量
- 在同一语句中调用的执行 IO 的函数:未定义或未指定
- 为什么我得到“操作可能未定义”?c++中的语句表达式