在 C++ 中,有些东西出现在定义明确和未定义之间。具体来说,它们被称为实现定义和未指定。现在,我对未指定的东西很感兴趣。
什么时候可以使用这些功能,什么时候应该避免使用?有没有很好的例子说明未指定的行为是正确代码的一部分?编写软件时,什么时候是最好的选择?
Matt McNabb 提供的定义:
未定义 - 任何事情都可能发生
实现定义 - 有限数量的结果是可能的,编译器的文档必须说明会发生什么
未指定- 有限数量的结果是可能的 - 通常标准描述一组可能的结果
定义明确 - 以上都不是
格式良好的程序 - 编译时没有错误的程序(可能表现出未定义的行为)
后续问题:
宽松的原子算作未指定的还是明确定义的?