未定义的行为是否依赖于c ++中的编译器?
每个编译器对每个问题都有自己的行为!
答案 0 :(得分:3)
未定义确实意味着未定义。也就是说,任何事情都可能发生。
可以依赖编译器吗?是。
所有编译器都可以做同样的事情吗?是。
今天可以做一件事明天做一件事吗?是。
可以让程序崩溃吗?是。
它可以做我认为它应该做的事情,似乎工作得很好吗?是。
任何事情都可能发生。
答案 1 :(得分:2)
关于未定义的行为,
C ++标准第1.3.24节声明:
允许的未定义行为包括完全忽略不可预测的结果,在翻译或程序执行期间以环境特征(有或没有发出诊断消息)的文件化方式行事,终止翻译或执行(发布诊断信息)。
所以,是的,当发生未定义的行为时,编译器可以自由地显示他们想要的任何行为。
答案 2 :(得分:1)
在C ++标准中指定了什么构成了未定义的行为。
当编译器遇到未定义行为的代码时,编译器生成的代码可以是任何内容。这是为编译器编写者提供优化的余地。
请注意,未定义的行为意味着您的程序可以执行任何操作。它不保证它会崩溃,抛出异常,或写入某个内存区域。如你所知,它可以删除你的整个文件系统,然后取出垃圾 - 这可以通过C ++标准。
远离未定义的行为。
答案 3 :(得分:1)
未定义的行为是否依赖于c ++中的编译器?
是即可。
可以这样说:
明确定义的行为符合标准并得到所有人的支持 编译器同样很好。
因此,
未定义的行为不符合标准,编译器也是如此 随心所欲地做任何事情!