首页 > 解决方案 > 何时包含内置类型和运算符的标头?

问题描述

什么时候应该包含内置类型的标头?

是否存在强制包含相应标题的情况?

标签: c++language-lawyernew-operatorinitializer-listtypeinfo

解决方案


严格来说,并非所有示例的行为都符合您的预期。例如

[expr.typeid]

6<typeinfo>如果在使用 之前没有包含 标题typeid,则程序格式错误。

[dcl.init.list]

2 ...模板std​::​initializer_­list未预定义;<initializer_­list>如果在使用之前没有包含 头文件std​::​initializer_­list——即使是没有命名类型的隐式使用——程序是非良构的。

所以有两个例子。当然,您可以在不包含某些标题的情况下通过,例如

using size_t    = decltype(sizeof(0));
using nullptr_t = decltype(nullptr);

但总的来说,完全确定我们得到定义良好的结果的方法是为标准类型包含正确的标头。


推荐阅读