c++ - 何时包含内置类型和运算符的标头?
问题描述
什么时候应该包含内置类型的标头?
<new>
fornew
(似乎对于复杂的重载确实需要它);它可以被使用。- (编辑:错误的例子(见答案))
<typeinfo>
对于std::type_info
;它可以通过使用typeid
运算符来获取 - (编辑:错误的例子(见答案))
<initializer_list>
对于std::initizlizer_list
;这只是auto l = {1, 2, 3};
或暂时的结果for (int i : {1, 2, 3}) {}
<cstddef>
///对于;<cstdio>
_<cstring>
_ 它可以作为运算符的结果给出或<ctime>
std::size_t
sizeof val
sizeof(Type)
<cstddef>
对于std::nullptr_t
;decltype(nullptr)
<cstddef>
对于std::ptrdiff_t
;decltype(std::declval<int *>() - std::declval<int *>())
<tuple>
对于结构化绑定的某些功能- 也许其他人
是否存在强制包含相应标题的情况?
解决方案
严格来说,并非所有示例的行为都符合您的预期。例如
[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);
但总的来说,完全确定我们得到定义良好的结果的方法是为标准类型包含正确的标头。
推荐阅读
- postgresql - odoo.service.server:无法加载服务器范围的模块`web`
- scikit-learn - 解释 SVC 和 GridSearch 结果
- python - 在信号上比较两个 django 的 DateTimeField
- excel - 在有时存在数据的 3 列上合并 2 个数据框
- geopandas - 来自 Holoviews 中 Shape 文件的 Choropleth 地图
- java - 处理两个服务器上的两个请求以同时验证数据
- netmiko - 是否可以将 Netmiko 版本从 3.0.0 降级到 2.4.2
- java - 有没有办法随机化 for 循环中的循环增加?
- php - 在嵌套的 IF 语句中 PHP 重定向不起作用
- java - 使用 JPA 在 Spring Boot 中生成的序列 ID(来自 DB 序列)由其他服务器/实例共享并导致违反唯一约束