int变量声明基本写法为“int 变量名”,可选初始化;其位宽不固定(至少16位),通常32位但依赖平台;推荐用{}初始化防窄化,未初始化局部变量值未定义,全局/静态变量零初始化;需确定宽度时应使用std::int32_t。

int 变量声明的基本写法
在 C++ 里定义一个 int 变量,最直接的方式就是写 int 加变量名,后面可选地跟上初始化值。编译器默认按平台决定其位宽(通常是 32 位),但不保证跨平台一致。
常见写法示例:
int x; // 未初始化,值是随机的(栈上)
int y = 42; // 初始化为 42
int z{100}; // 使用花括号初始化(推荐,防窄化)
- 未初始化的局部
int不会自动归零,读取它属于未定义行为 - 全局或静态作用域的
int会被零初始化,不用显式赋值 - 用
{}初始化比=更安全,比如int a{3.14};会编译报错,而int a = 3.14;会静默截断
为什么 int 的大小不固定
int 是“至少 16 位”的整型,C++ 标准只规定下限,不指定具体大小。实际大小取决于编译器和目标平台:
- x86-64 Linux/macOS/Windows 上,
g++、clang++、MSVC默认都让int是 32 位 - 某些嵌入式平台(如部分 ARM Cortex-M)可能把
int设为 16 位 - 如果你需要确定宽度,应该用
std::int32_t或int32_t(需#include)
验证当前平台大小:写 static_assert(sizeof(int) == 4);,编译失败就说明不是 32 位。
容易踩的坑:符号性与溢出
int 是有符号类型,最高位是符号位。一旦超出范围(比如 32 位 int 是 −2,147,483,648 到 2,147,483,647),行为是未定义的——不是简单回绕,编译器可能优化掉你的判断逻辑。
- 别依赖
int溢出后“自动变负数”,这是未定义行为 - 做循环计数或数组索引时,如果可能超过 21 亿,优先考虑
size_t或std::size_t(尤其配合.size()) - 涉及位运算或移位时,确保右操作数非负且小于位宽,否则也是未定义行为(例如
i 对 32 位int)
什么时候不该用 int
虽然 int 写起来最顺手,但它不适合所有场景:
- 表示容器大小或内存偏移:用
size_t(无符号,足够大) - 需要精确 64 位:用
int64_t,而不是依赖long(在 Windows 上long是 32 位) - 做文件 I/O 或系统调用返回值:注意函数签名,比如
read()返回ssize_t,不是int - 作为枚举底层类型:C++11 起可显式指定,如
enum class E : uint8_t { A, B };,避免默认用int浪费空间
真正关键的不是“怎么写 int x;”,而是你是否清楚它在哪种上下文里会悄悄越界、被截断、或和平台特性打架。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











