10.8实现定义、未明确和无定义行为的区别
简单地说: 实现定义意味着实现必须选择某种行为并提供文档。未明确意味着实现必须选择某种行为但不必提供文档。未定义意味着任何事情都可能发生。标准在任何情况下都不强加需求; 前两种情况下, 它有时建议一组可能的行为(也可能要求从中选择一种)。
注意,既然标准对无定义行为没有强制要求, 编译器就绝对可以做任何事情。特别地, 对程序其它部分的正常运行没有任何保证; 参见问题3.2, 有一个相对简单的例子。
如果你对书写可移植代码有兴趣, 你可以忽略它们的区别, 因为通常你都希望避免依赖三种行为中的任何一种。参见问题3.8 和11.34。
第四种不那么严格定义的行为是“场景特定” (locale-specific)。
注意,既然标准对无定义行为没有强制要求, 编译器就绝对可以做任何事情。特别地, 对程序其它部分的正常运行没有任何保证; 参见问题3.2, 有一个相对简单的例子。
如果你对书写可移植代码有兴趣, 你可以忽略它们的区别, 因为通常你都希望避免依赖三种行为中的任何一种。参见问题3.8 和11.34。
第四种不那么严格定义的行为是“场景特定” (locale-specific)。