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