sizeof(short) 返回字节数而非位数,标准仅保证其不小于 sizeof(char) 且通常≥2,但不可假设恒为2。
sizeof(short) 返回的是字节数,不是位数
很多人看到
就默认是 16 位,然后直接写
做判断——这在 x86/x64 上通常成立,但标准只保证
且
实操建议:
用
获取运行时真实字节数,别硬编码假设为 2
需要确切宽度时,优先用
(来自
),它明确是 16 位有符号整数
在嵌入式或跨平台项目里,
可能是 4 字节(比如某些 DSP 或老 ARM 编译器)
sizeof(short) 和 sizeof(short int) 完全等价
C++ 标准规定
是
的简写,二者类型完全相同,
结果必然一致。不会出现一个 2 字节、另一个 4 字节的情况。
常见错误现象:
立即学习
“
C++免费学习笔记(深入)
”;
误以为
比
“更完整”,从而在类型声明里多写
——纯属冗余,还可能干扰模板匹配
在文档或注释里写“
占 2 字节”,却不提
也一样,造成读者困惑
在结构体里用 sizeof(short) 要小心对齐影响
自身返回的是该类型的大小,但放在结构体中,它的实际占用空间可能因对齐而扩大。比如在 4 字节对齐的平台上,
的结构体大小可能不是 3,而是 4 或 6。
C函数速查手册(CHM版)
C函数速查手册(CHM版)
下载
实操建议:
用
查看其对齐要求,它常等于
,但不绝对
结构体总大小 ≠ 各成员
之和,得用
实测
想压缩空间?把小类型(如
)集中放前面,避免
被强制填充
sizeof(short) 在模板和 constexpr 中可直接用
是编译期运算符,
可用于
表达式、模板非类型参数、数组维度等场景,没有运行时开销。
使用示例:
注意点:
不能写
当作模板参数名(含空格非法),但
没问题
不同平台下该值可能不同,所以基于它的模板实例化结果也会不同——跨平台时得留意
真正容易被忽略的是:你写的
看似简单,但它背后绑定的是整个编译环境的 ABI。改个编译器、换条指令集、切个 C++ 标准版本,都可能让结果变掉。别把它当成常量来信任,除非你控制了全部构建条件。
shortsizeof(short) == 2sizeof(short) >= sizeof(char)sizeof(short) 。实际值由编译器和 ABI 决定。sizeof(short)int16_tshortshortshort intsizeofshort intshortintshort intshortsizeof(short)char + shortalignof(short)sizeof(short)sizeofsizeof(YourStruct)charshortsizeofsizeof(short)constexprconstexpr size_t SHORT_BYTES = sizeof(short);
template
struct PackedData { char buf[N]; }; sizeof(short int)sizeof(short)sizeof(short)