编译器独立类型
Compiler Independent Types
我见过几个库和一些c++头文件提供编译器独立的类型,但我不太明白为什么它们是编译器独立的
例如:int Number; // Not compiler Independent
typedef unsigned int U32;
U32 Number2; // Now this is compiler independent
这是真的吗?如果是,为什么?我不太明白为什么使用typedef意味着Number2的大小在不同的编译器中是相同的。
详细说明评论,
建议:使用typedef来独立于编译器。
理论基础:平台独立是件好事
实施:
#ifdef _MSC_VER
#if _MSC_VER < 1400
typedef int bar;
#elif _MSC_VER < 1600
typedef char bar;
#else
typedef bool bar;
#else
#error "Unknown compiler"
#endif
预处理器宏链是重要的部分,而不是类型定义。
免责声明:我没有编译它!
我假设您的意思是类型与unsigned int Number
相同。
但是不,它们是完全一样的。两个声明,Number
和Number2
,具有相同的类型。两者都不是编译器独立的
然而,像这样使用typedef
的目的是使库的开发人员可以轻松地更改所有使用U32
的函数使用的整数类型。例如,如果他们在一个unsigned int
不是32位的系统上,但unsigned long
是32位的,他们可以将typedef
更改为:
typedef unsigned long U32;
实际上,可以使用构建系统根据目标平台有条件地更改typedef
。
然而,如果你想要一个很好的标准化方法来确保类型是32位无符号整数类型,我建议使用<cstdint>
头中的std::uint32_t
。但是,如果您在一台没有32位整数类型的机器上,则不能保证该类型存在。相反,您可以使用std::uint_least32_t
,它将提供至少32位的最小整数类型。
如注释所述,所示的typedef不是独立于编译器的。
如果你想要一种独立于编译器的方法来获得固定的大小,你可能想要使用cstdint。这个头文件实际上是编译器自带的,它保证了最小大小,但对于更大的类型(64位,128位)没有最大值。
如果你想完全确定你的字体的大小,你需要检查它
- 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++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 为什么C++哈希函数的返回类型是 std::size_t,而不是独立于平台的类型?
- 编译器独立类型
- 引用在c++中是独立的类型吗?如果不是,为什么要用这种类型来写
- 从类模板类型定义一个独立的静态成员函数
- 推导独立函数的返回类型