未定义行为是否依赖于 c++ 中的编译器?
每个编译器对于每个问题都有自己的行为!
未定义确实意味着未定义。也就是说,任何事情都可能发生。
它可以依赖于编译器吗?是的。
所有编译器都可以做同样的事情吗?是的。
它可以今天做一件事,明天做一件事吗?是的。
它会让程序崩溃吗?是的。
它能做我认为应该做的事情并且看起来工作正常吗?是的。
任何事情都可能发生。
关于未定义的行为,
C++ 标准第 1.3.24 节规定:
允许的未定义行为包括完全忽略结果不可预测的情况,到在翻译或程序执行期间以环境特有的记录方式进行行为(无论是否发出诊断消息),到终止翻译或执行(使用发出诊断消息)。
所以,是的,当发生未定义行为时,编译器可以自由地显示他们想要的任何行为。
C++ 标准中规定了未定义行为的构成。
根据定义,编译器在遇到表现出未定义行为的代码时生成的代码可以是任何内容。这是为了给编译器编写者优化的余地。
请注意,未定义的行为意味着您的程序可以执行任何操作。它不保证它会崩溃,或抛出异常,或写入特定的内存区域。据您所知,它可以删除整个文件系统,然后清除垃圾 - 按照 C++ 标准,这是可以的。
远离未定义的行为。
未定义行为是否依赖于 c++ 中的编译器?
是的。
可以这样争论:
明确定义的行为符合标准并受到所有人的支持 编译器同样好。
因此,
未定义的行为不符合标准,并且编译器 可以自由地做任何他们想做的事!