未定义的行为依赖于c++中的编译器吗?
每个编译器对每个问题都有自己的行为!
发布于 2012-05-10 15:15:03
undefined确实意味着未定义。也就是说,任何事情都可能发生。
它能依赖于编译器吗?是。
所有的编译器都能做同样的事情吗?是。
它今天能做一件事,明天能做一件事吗?是。
它会使程序崩溃吗?是。
它可以做我认为它应该做的事情,而且看起来工作得很好吗?是。
任何事情都有可能发生。
发布于 2012-05-10 15:09:26
关于未定义的行为,
C++标准1.3.24节说明:
允许的未定义行为范围从完全忽略具有不可预测结果的情况,到在翻译或程序执行期间以环境特有的记录方式(有或没有发出诊断消息)的行为,到终止翻译或执行(有诊断消息的发出)。
所以,是的,当未定义的行为发生时,编译器可以自由地显示他们想要的任何行为。
发布于 2012-05-10 15:06:22
在C++标准中规定了什么是未定义的行为。
根据定义,当编译器遇到表现出未定义行为的代码时,它生成的代码可以是任何东西。这是为了给编译器作者提供优化的回旋余地。
请注意,未定义的行为意味着您的程序可以做任何事情。它不能保证它会崩溃,或者抛出异常,或者写入内存的某个区域。正如您所知道的,它可以删除整个文件系统,然后倒出垃圾桶-按照C++标准,这是可以接受的。
远离未定义的行为。
https://stackoverflow.com/questions/10528952
复制相似问题