第二章P32页:如何选择正确的类型.

2015-06-13  本文已影响0人  Roland

在C++ Primer的第二章里面讨论了该如何选择正确的类型,这里是些自己的看法,和书上的不全一样。

char, short, int and long

signed integer vs unsigned integer

Fixed-Precision Integer Types

除了intlong这样子没有规定具体大小的类型以为,C++11还有一系列固定精度的整形,定义在头文件cstdint中,它们是int8_t int16_t int32_t int64_t和对应的无符号类型。在这些情况下,你需要一个变量表示某个硬件上的32位的寄存器;你需要一个变量表示ipv4的地址;这些情况最好使用固定精度的整形。如果你只用个int来表示的下,在不同的编译器下可能会大小不一样,而造成问题。

double Vs float

如果精度允许,首选float来提升程序性能。

SIMD

使用void*来表示地址类型。

size_t, size_type, difference_type Or integer type

为什么需要size_t, size_type, difference_type

    vector<int>::size_type size = v.size();
    vector<int>::difference_type diff = v.begin() - v.end();

v.size()具体能有多大完全是平台相关的,比如说32位CPU下,最大也只能是4G。但是64bit下就要大的多。所以如果使用int或者long之类的保存v.size()的值,其可移植性不好,要么是太小无法保存其值,要么是太大浪费了效率。所以就定义了这些特别的类型。

std::size_t is the unsigned integer type of the result of the sizeof operator
difference_type provides the difference between two iterators that refer to elements within the same vector.
size_type represents the number of elements in a vector.

选择size_type还是int呢?

    for (int i = 0; i < v.size(); i++); // warning in some compiler
    for (vector<int>::size_type i = 0; i < v.size(); i++);
    for (decltype(v.size()) i = 0; i < v.size(); i++);

个人的习惯

上一篇 下一篇

猜你喜欢

热点阅读