『C编程』学习笔记(1)
size_t类型详解:
#include <cstddef> #include <iostream> #include <array> int main() { std::array<std::size_t,10> a; for (std::size_t i = 0; i != a.size(); ++i) a[i] = i; for (std::size_t i = a.size()-1; i < a.size(); --i) std::cout << a[i] << " "; }
Output:
9 8 7 6 5 4 3 2 1 0
typedef / * implementation-defined * / size_t ;
|
||
std :: size_t是 sizeof运算符的结果的无符号整数类型,以及sizeof ...运算符和alignof运算符 (自C ++ 11起)。
笔记
std :: size_t可以存储任何类型(包括数组)理论上可能的对象的最大大小。大小无法表示的类型std::size_t
是不正确的 (因为C ++ 14)在许多平台上(例外是具有分段寻址的系统) std :: size_t可以安全地存储任何非成员指针的值,在这种情况下它与std :: uintptr_t同义。
std :: size_t通常用于数组索引和循环计数。使用其他类型(例如unsigned int)进行数组索引的程序可能会失败,例如当索引超过 UINT_MAX时64位系统或依赖于32位模运算。
索引C ++容器(例如std :: string,std :: vector等)时,相应的类型是此类容器提供的成员typedef size_type。它通常被定义为std :: size_t的同义词。
链接:https://en.cppreference.com/w/cpp/types/size_t
size_t和unsigned int有所不同,size_t的取值range是目标平台下最大可能的数组尺寸
,一些平台下size_t的范围小于int的正数范围,又或者大于unsigned int.
最典型的,在x64下,int还是4,但size_t是8.这意味着你在x64下最大可能开辟的数组尺寸是2^64.
如果你使用int或者unsigned int,那么在x64下如果你的代码中全部使用uint作为数组的尺寸标记,
那么你就会失去控制2^32尺寸以上的数组的机会.虽然现在在x64上开辟一个大于2^32大小的连续数组依然是个不大可能的事情,但是..........
“640K内存对于任何人来说都足够了”----比尔盖茨