跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

C++ sizeof short用法 C++查看short int长度【实验】

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

相关文章