未定义的行为是否取决于 c++ 中的编译器
Does Undefined Behavior depend on the compiler in c++?
未定义的行为是否依赖于 c++ 中的编译器?
每个编译器对每个问题都有自己的行为!
未定义确实意味着未定义。也就是说,任何事情都可能发生。
它可以依赖于编译器吗?是的。
所有编译器都可以做同样的事情吗?是的。
它今天能做一件事,明天做一件事吗?是的。
它会使程序崩溃吗?是的。
它能做我认为它应该做的事情并且似乎工作正常吗?是的。
任何事情都可能发生。
关于未定义的行为,
C++ 标准第 1.3.24 节规定:
允许的未定义行为包括完全忽略情况并产生不可预测的结果,在翻译或程序执行期间以环境特征的记录方式行为(发出或不发出诊断消息),到终止转换或执行(发出诊断消息)。
因此,是的,编译器可以在发生未定义行为时自由显示他们想要的任何行为。
什么构成未定义的行为在C++标准中指定。
根据定义,编译器在遇到表现出未定义行为的代码时生成的代码可以是任何内容。这是为了给编译器编写者优化留有余地。
请注意,未定义的行为意味着您的程序可以做任何事情。它不保证它会崩溃,或抛出异常,或写入内存的某个区域。据您所知,它可以删除您的整个文件系统,然后取出垃圾 - 按照C++标准,这是可以的。
远离未定义的行为。
未定义的行为是否依赖于 c++ 中的编译器?
是的。
可以这样争论:
定义良好的行为符合标准,并得到所有人的支持 编译器同样出色。
因此
未定义的行为不符合标准,编译器是 自由做任何他们想做的事!
相关文章:
- C/C++编译器通常会删除重复的库吗
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- Win32编译器选项和内存分配
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++,我收到一个无法理解的编译器错误
- 在线编译器中的分段C++没有打印消息
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- C/C++预处理器是否可以检测一些编译器选项
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- C++错误C2600:无法定义编译器生成的特殊成员函数(必须首先在类中声明)
- 我需要知道编译器如何在cpp中使用析构函数
- 编译器如何区分std::vector的构造函数
- CLANG 编译器 说:变量"PTR"可能未初始化
- 告诉c++编译器该参数没有别名
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- 为什么所有C++编译器都会崩溃或挂起此代码
- 编译器如何在使用SFINAE的函数和标准函数之间确定两者是否可行
- 我收到同义重复编译器错误。我应该如何修复"类型"X"的参数与类型"X"的参数不兼容?
- 为什么C++编译器没有检测到正确声明的类?