ala*_*ain 4 c++ undefined-behavior language-lawyer
首先,需要注意的是,不仅未定义用户程序的行为,而且未定义编译器的行为.
如果源代码包含未定义的行为,是否只是未定义的已翻译机器代码的行为,或者编译器的行为是否也未定义?
该标准定义了抽象机器的行为(1.9):
本国际标准中的语义描述定义了参数化的非确定性抽象机器.本国际标准对符合实施的结构没有要求.特别是,它们不需要复制或模拟抽象机器的结构.相反,需要符合实现来模拟(仅)抽象机器的可观察行为,如下所述.
也许问题是编译器是否是该机器的一部分,如果是,是否允许该部件以未定义的方式运行?
这个问题的一个更实际的版本是:
假设编译器在所有控制路径上找到UB时会崩溃或不产生任何输出,就像在这个程序中一样:
int main() {
complex_things_without_UB();
int x = 42;
x = x++; //UB here
return x;
}
Run Code Online (Sandbox Code Playgroud)
但否则它将始终产生正确的二进制文件.这仍然是符合标准的编译器吗?
C++标准定义了代码的行为,它没有定义编译器的行为.因此,引用编译器的未定义行为并没有多大意义 - 从一开始就没有明确定义.唯一的要求是它产生符合代码标准指南的实现.它是如何实现的.
| 归档时间: |
|
| 查看次数: |
323 次 |
| 最近记录: |