Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C+中未定义行为段落中的[注释]是什么+;标准平均数? < C++标准的1.3.12段中有一个注释[< /p>_C++_Standards_Undefined Behavior_Iso_Language Lawyer - Fatal编程技术网

C+中未定义行为段落中的[注释]是什么+;标准平均数? < C++标准的1.3.12段中有一个注释[< /p>

C+中未定义行为段落中的[注释]是什么+;标准平均数? < C++标准的1.3.12段中有一个注释[< /p>,c++,standards,undefined-behavior,iso,language-lawyer,C++,Standards,Undefined Behavior,Iso,Language Lawyer,允许的未定义行为范围从完全忽略情况和不可预测的结果,到在翻译或程序执行期间以环境特有的文件化方式进行行为 这是否与UB的定义相矛盾,即本国际标准未规定任何要求?我的意思是,他们说“无要求”,然后说“允许UB”-就在同一段中 该如何解释本说明?它确实以任何方式限制UB吗?由于注释不规范,它不会以任何方式限制UB。这只是一个澄清,一个实现可以使用一些结构,正式地将UB作为一个文档化的扩展,当然,任何依赖于这样一个细节的程序本质上都不能安全地移植到其他环境。由于注释不是规范性的,所以它不会以任何方式限

允许的未定义行为范围从完全忽略情况和不可预测的结果,到在翻译或程序执行期间以环境特有的文件化方式进行行为

这是否与UB的定义相矛盾,即本国际标准未规定任何要求?我的意思是,他们说“无要求”,然后说“允许UB”-就在同一段中


该如何解释本说明?它确实以任何方式限制UB吗?

由于注释不规范,它不会以任何方式限制UB。这只是一个澄清,一个实现可以使用一些结构,正式地将UB作为一个文档化的扩展,当然,任何依赖于这样一个细节的程序本质上都不能安全地移植到其他环境。

由于注释不是规范性的,所以它不会以任何方式限制UB。这只是一个澄清,一个实现可以使用一些正式导致UB作为文件化扩展的结构,当然,任何依赖此类细节的程序本质上无法安全地移植到其他环境。

来自ISO/IEC指令§6.5.1:

注释和示例集成在 仅可使用标准文本 用于提供更多信息 旨在帮助理解 或使用本标准,且不得 包含其适用的条款 必须符合才能被接受 能够声称符合 标准

因此,它完全是非规范性的(非约束性的),仅用于可能的澄清。

来自ISO/IEC指令§6.5.1:

注释和示例集成在 仅可使用标准文本 用于提供更多信息 旨在帮助理解 或使用本标准,且不得 包含其适用的条款 必须符合才能被接受 能够声称符合 标准


因此,它完全是非规范性的(非约束性的),仅用于可能的澄清。

本说明解释了在遇到没有定义行为的代码时,实现可能会做什么。“允许”一词并非限制,而是给出了一些常见行为的示例

有趣的是,编译器几乎总是要编译一些东西!考虑这个代码片段:

void f() { 1 / 0; }
译者遇到这种情况时的行为并没有很好的定义,但它不能随心所欲!事实上,如果它是一个编译器,它仍然需要编译这个编译单元。这是因为包含此函数的程序的行为仍然可以很好地定义!编译器无法知道是否调用了该函数。事实上,当函数是“main()”并且控制一定要通过零除法时,就会出现这个问题,结果是编译器甚至不允许拒绝该程序。原因是:程序仍然是格式良好的,并且要求合格的编译器接受所有格式良好的程序(并拒绝所有格式不良的程序并发出诊断错误消息,除非另有规定)

这不容易被弄成格式错误,因为很难精确地指定智能编译器在检测何时必须进行零除时的要求


有趣的是,该标准声称“没有规定任何要求”,事实上几乎是错误的。支持单独编译的编译系统的特点是,它无法检测没有明确定义行为的代码段是否实际执行,因此编译器实际上需要编译某种东西,因为它无法推断程序是否有未定义的行为。

本说明解释了如果遇到没有定义行为的代码,实现可能会做什么。“允许”一词并非限制,而是给出了一些常见行为的示例

有趣的是,编译器几乎总是要编译一些东西!考虑这个代码片段:

void f() { 1 / 0; }
译者遇到这种情况时的行为并没有很好的定义,但它不能随心所欲!事实上,如果它是一个编译器,它仍然需要编译这个编译单元。这是因为包含此函数的程序的行为仍然可以很好地定义!编译器无法知道是否调用了该函数。事实上,当函数是“main()”并且控制一定要通过零除法时,就会出现这个问题,结果是编译器甚至不允许拒绝该程序。原因是:程序仍然是格式良好的,并且要求合格的编译器接受所有格式良好的程序(并拒绝所有格式不良的程序并发出诊断错误消息,除非另有规定)

这不容易被弄成格式错误,因为很难精确地指定智能编译器在检测何时必须进行零除时的要求


有趣的是,该标准声称“没有规定任何要求”,事实上几乎是错误的。支持单独编译的编译系统的特点是,它无法检测没有明确定义行为的代码段是否实际执行,因此编译器实际上需要编译某种东西,因为它无法推断程序是否有未定义的行为。

除此之外,注释基本上说任何事情都是允许的,这让我们回到了“不强制要求”的状态territory@jk,取决于“范围从”的含义。除了注释