
是的,short int 和 short 在 C++ 中完全等价,编译器把它们当同一个类型处理。
为什么 short 可以省略 int
C++ 标准规定,short 是 short int 的“简称”,就像 long 等价于 long int、long long 等价于 long long int 一样。这不是语法糖,而是语言层面的同义词。
-
short不是short int的“缩写形式”,而是标准明确承认的独立关键字,语义完全一致 - 两者在
sizeof、typeid、模板推导、函数重载中表现完全相同 - 用
short int x;还是short x;,生成的机器码、ABI 表示、内存布局毫无区别
什么时候会看到 short int 写法
实际代码里几乎只用 short,但你可能在以下场景撞见 short int:
- 某些自动生成的头文件(比如 C 风格绑定或旧版 IDL 工具产出)
- C 标准文档或老教材里为强调“整型家族”而显式写出
int - 和
signed short int/unsigned short int并列时,为格式统一保留int - 极少数人写类型别名时误以为
short int更“完整”——其实没必要
short 的实际大小和陷阱
short 只保证至少 16 位,不保证就是 16 位;它甚至不保证比 int 小(虽然绝大多数平台都满足)。这是最容易出问题的地方。
立即学习“C++免费学习笔记(深入)”;
- 在 Windows x64、Linux x86_64 上,
sizeof(short)通常是 2,但sizeof(int)是 4 —— 这符合标准,但容易让人误以为“short更节省空间”就一定成立 - ARM64 某些嵌入式工具链可能让
short是 4 字节(罕见,但合法) - 跨平台序列化时,直接写
short到文件或网络,很可能在另一端读错——必须用固定宽度类型如int16_t - 模板元编程中判断类型时,
std::is_same_v<short short int></short>恒为true,但std::is_same_v<short int16_t></short>不一定(取决于平台是否把int16_t定义为short)
真正要注意的不是写法差异,而是别把 short 当作可移植的“16 位整数”来用;该用 int16_t 的地方,别图省事写 short。










