是否可以将cstdint类型定义绑定到某些特定于实现的类型std::numeric_limits没有专门针对的类型?
Can cstdint typedefs bind to some implementation specific types std::numeric_limits is not specialized for?
是否有可能,至少在理论上,cstdint typedefs绑定到一些std::numeric_limits没有专门用于的实现特定类型?
根据http://www.cplusplus.com/reference/limits/numeric_limits,让我引用一下,"[std::numeric_limits]是为每个基本算术类型特化的,其成员描述类型t的属性。这个模板不能为任何其他类型特化。"
根据http://en.cppreference.com/w/cpp/types/numeric_limits,让我再次引用,"实现可以为特定于实现的类型提供std::numeric_limits的专门化"。
"May", cppreference表示。所以他们不需要。
最后,根据http://www.cplusplus.com/reference/cstdint,在头文件"中定义的类型定义是基本整型或扩展整型的类型定义"。
所以,总而言之——cstdint typedefs似乎可以绑定到扩展整型(无论它们是什么),而不是基本整型(同样,无论它们是什么),因此可能与std::numeric_limits不兼容。这是正确的吗?然而,我链接到的文件似乎在一点上有点不一致。cplusplus.com禁止std::numeric_limits不能为任何非基本算术类型专门化,这难道不是与cppreference允许std::numeric_limits可以为特定于实现的类型专门化相反吗?当然,除非这些特定于实现的类型实际上是基本整型,在这种情况下,std::numeric_limits必须针对所有cstdint类型进行专门化。 这些文件把我弄糊涂了。所以我在这里问我的问题:)
编辑。
根据http://eel.is/c++draft/cstdint, cstdint必须绑定到整数类型。根据http://eel.is/c++draft/limits.numeric,"专门化应该为每个算术类型提供,包括浮点型和整型,包括bool"。整数类型是算术类型,因此std::numeric_limits必须专门化用于cstdint typedefs,这种理解正确吗?
必须存在像std::numeric_limits<std::int_fast32_t>
这样的专门化。
3.9.1/2:
有5种标准符号整数类型: "
signed char
", "short int
", "int
", "long int
", "long long int
". ...也可以有实现定义的扩展的有符号整数类型。标准和扩展的有符号整数类型统称为有符号整数类型。
3.9.1/3:
对于每个标准有符号整数类型,都存在一个相应的(但不同的)标准无符号整数类型....同样,对于每个扩展的有符号整数类型,都存在一个相应的扩展的无符号整数类型....标准和扩展无符号整数类型统称为无符号整数类型。
3.9.1/7:
类型
bool
、char
、char16_t
、char32_t
、wchar_t
以及有符号和无符号整数类型统称为整型类型。整型的同义词是整型。
3.9.1/8:
整型和浮点型统称为算术型。标准模板
std::numeric_limits
(18.3)的特化应该指定实现中每种算术类型的最大值和最小值。
18.3.2.1/2:
numeric_limits
的专门化[应该为每种算术类型提供,包括浮点数和整数,包括bool
。
18.4.1:
namespace std {
typedef signed_integer_type int8_t; // optional
//...
typedef unsigned_integer_type uint8_t; // optional
//...
}
所以<cstdint>
中定义的类型可能是扩展类型,但肯定是整数类型,因此必须具有std::numeric_limits
的相应专门化。
同样,所有的整型都是标准(3.9)中使用的意义上的"基本型",尽管并非所有的整型都是标准类型。
- ArduinoJson 6.15.2:JsonObject没有命名类型
- 防止主数据类型C++的隐式转换
- 大量序列中核苷酸类型的快速计数
- 如何从C++中的依赖类型中获得它所依赖的类型
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 是否可以初始化不可复制类型的成员变量(或基类)
- 如何获取std::result_of函数的返回类型
- 从父命名空间重载类型
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 访问者访问变体并返回不同类型时出错
- 在VS2010-VS2015下编译时,如何使用decltype作为较大类型表达式的LHS
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 模板元程序查找相似的连续类型名称
- 是否可以从int转换为enum类类型
- 构造函数正在调用一个使用当前类类型的函数
- 我应该使用什么来代替void作为变体中的替代类型之一
- 检测<T>某些非数字类型 T 的 std::numeric::type 的特化