相关疑难解决方法(0)

未定义的行为和序列点

什么是"序列点"?

未定义的行为和序列点之间的关系是什么?

我经常使用有趣和复杂的表达方式a[++i] = i;,让自己感觉更好.我为什么要停止使用它们?

如果您已阅读此内容,请务必访问后续问题重新加载未定义的行为和序列点.

(注意:这是Stack Overflow的C++常见问题解答的一个条目.如果你想批评在这种形式下提供常见问题解答的想法,那么发布所有这些的元数据的发布将是这样做的地方.这个问题在C++聊天室中受到监控,其中FAQ的想法一开始就出现了,所以你的答案很可能被那些提出想法的人阅读.)

c++ c++-faq undefined-behavior sequence-points

970
推荐指数
4
解决办法
10万
查看次数

如果复合表达式中的多个操作数修改同一个对象,它是否是未定义的行为?

我依稀记得在复合表达式中的多个操作数修改同一个对象时,在某处读取它是未定义的行为.

我相信下面的代码中显示了这个UB的一个例子,但是我编译了g ++,clang ++和visual studio,所有这些都打印出相同的值,并且似乎无法在不同的编译器中产生不可预测的值.

#include <iostream>

int a( int& lhs ) { lhs -= 4; return lhs; }
int b( int& lhs ) { lhs *= 7; return lhs; }
int c( int& lhs ) { lhs += 1; return lhs; }
int d( int& lhs ) { lhs += 2; return lhs; }
int e( int& lhs ) { lhs *= 3; return lhs; }

int main( int argc, char **argv )
{
    int i = 100;
    int …
Run Code Online (Sandbox Code Playgroud)

c++ undefined-behavior language-lawyer unspecified-behavior c++11

27
推荐指数
3
解决办法
944
查看次数