C++ 基本类型使用注意点

又看了一遍C++ Primer的第二章, 做点笔记吧:

  1. 所有的基本类型都是机器无关的, C++标准只是规定了这些类型的最小存储空间, 比如int只是说规定了最小的的存储单位是2个字节, 而往往一般现在的通用机器上int都是四个字节的. 程序逻辑不应当依赖与机器相关的行为, 比如说我们写程序的时候使用了一个int变量, 在程序逻辑中, 程序的正确性不应该依赖说int是四个字节的(如果程序仅仅依赖于四个字节确定大小的类型, 则可以考虑使用确定四个字节的类型int32_t, 参考下面的第3点), 这个是和机器有关的, 这样的程序不可移植.

  2. long 类型和 int 类型的选择是有区别的, long 类型的运行时代价远远高于int类型, 所以写程序的时候要想清楚, double类型比float类型的运行时代价也要大一点, 但是基本可以忽略, 所以double和float的选择基本是选择double. (Why?)

  3. int64_t 和 long long 区别在哪里, 什么时候用哪一个? int64_t 被称作Fixed width integer types (since C++11), 一般来讲两个类型都是64位, 但是int64_t是确定大小的整形, long long不能说是确定. 具体使用看具体情况, 有说建议”使用确定大小的整型”, 我的理解是两方面原因: (1) 程序行为的确定性, 因为long long这些类型的整形大小其实是不确定的, 若果程序移植到其他机器上, 可以会出现不可预料的结果 (2) 另一个从效率方面来考虑, 确定型的整数的效率应该是比long long这种稍高一点吧, 因为省去了运行时或者编译时大小的最终确定. 这一条有待进一步考证, 一般也还是看程序逻辑需要怎么样的, 程序需要确定大小的整形(一般我们写程序脑子里面也似乎总是觉得这个类型的大小是确定的, 从这个角度讲似乎应该是总是使用确定大小的整型), 那么就用int64_t这样的类型, 或者有时候需要某个类型至少多大, 因为可能需要处理potential的更大的数据, 那么就可以使用long long这种了. 另外注意, 在window环境下面确定型整数貌似是写成__int64这种形式的.

Written on September 13, 2013