是否允许C++编译器在遇到被归类为未定义行为的构造时发出随机代码?

sha*_*oth 0 c++ undefined-behavior

可能重复:
未定义,未指定和实现定义的行为

我正在努力加深对C++中未定义行为的理解.假设C++编译器会故意检测某些未定义行为的情况 - 例如,在两个序列点之间修改变量两次:

x++ = 2;
Run Code Online (Sandbox Code Playgroud)

一旦该虚构的编译器可靠地检测到这种情况,它就会发出十个完全随机的机器指令到生成的机器代码中.

根据C++标准,无论什么东西被归类为UB,对发生的事情都没有要求.所描述的虚构编译器是否符合C++标准?

Mat*_*hen 9

是.标准没有要求,所以它可以做任何想做的事情:

未定义的行为

行为,例如在使用错误的程序结构或错误数据时可能出现的行为,本国际标准没有规定任何要求.

就像一个注释,这是未定义的行为,但它不一定是一个很好的例子.在g ++ 4.4.1上,它将拒绝编译:

错误:左值作为赋值的左操作数需要左值

因为后增量的结果不是左值.