sizeof
#
sizeof
用于获取类型或表达式对应类型的大小, 返回该类型占多少字节, 跟值是多少没有任何关系.
如果类型为引用, 则返回被引用类型的大小. 这是可以理解的, 因为引用只需要作为别名而非对象, 不要求被实际存储.
1int value;
2sizeof(value) == sizeof(int);
1int value;
2int& reference = value;
3sizeof(reference) == sizeof(int); // 返回被引用类型的大小
4sizeof(int&) == sizeof(int); // 返回被引用类型的大小
1int* pointer;
2sizeof(pointer) == sizeof(int*);
3sizeof(pointer + 1) == sizeof(int*);
1int array[5];
2sizeof(array) == sizeof(int) * 5; // 数组本身的大小
3sizeof(array[0]) == sizeof(int); // 数组元素的大小
4
5/* C风格数组非常容易隐式类型转换为首元素的指针! */
6sizeof(array + 0) == sizeof(int*);
7sizeof(+array) == sizeof(int*);
危险
标准并没有规定一个字节占多少位, 更没有规定大多数基础类型的具体大小, 例如 sizeof(int)
并不一定是 4. 以下是一些固定的值,
1 == sizeof(char) == sizeof(signed char) == sizeof(unsigned char)
.4 == sizeof(float)
.8 == sizeof(double)
.
如果实在需要固定大小的整数, 请使用 <cstdint>
中的定长整数别名, 例如 std::int64_t
.