CppStudio logo CppStudio
首页 / 教程 / 第13课

C++ 程序可视化教程 · 第13课 · 第二章 变量

变量的三种初始化写法:=、()、{} 有什么区别?

三种写法效果相同:int a = 1、int b(2)、int c{3}。差别在严格程度—— {} 发现精度丢失会直接报错(int x{90.5} 编译失败),= 和 () 会默默截断。 {} 空写还能自动初始化为 0。现代 C++ 推荐 {}。

三种写法

int a = 1;    // 拷贝初始化,最传统
int b(2);     // 直接初始化,函数式写法
int c{3};     // 列表初始化,C++11 起

对基本类型,三行效果完全一样。请三种都认识——读别人的代码都会遇到。

{} 的严格性

int x = 90.5;    // 编译通过,x 悄悄变成 90
int y{90.5};     // 编译报错:不允许丢失精度

=() 时,把小数装进 int 会被默默截断;用 {} 则直接编译失败,把问题暴露在写代码的当下。这是 {} 被推荐的核心理由:让错误尽早出现。

另一个便利:int a{}; 不给值会自动初始化为 0,是"定义即清零"的紧凑写法。

一点历史感

老代码里 = 最多,2011 年以后的代码 {} 渐成主流。本系列的示例从本课起统一使用 {},与主流现代教材一致。{} 的真正价值到容器(装一组值的类型)才完全展现,数组和 STL 章节会回收这一点。

可视化观察

在 CppStudio 中打开本课示例,点击播放:

  1. 三个变量依次出现在监视区,值分别为 1、2、3——三种写法,同一个结果;
  2. 输出区一行显示 1 2 3
  3. 可以把示例里的 int c{3} 改成 int c{3.5} 再运行,亲眼看一次编译报错——这是 {} 严格性的直接体验。

常见错误

下一课:auto 类型推导——让编译器根据初值自动判断类型。

▶ 运行本课示例 弹窗里直接跑,流程图同步展开;也可新窗口打开

常见问题

int a = 1 和 int b(2) 和 int c{3} 有什么区别?

对 int 这类基本类型效果相同,都是定义并给初值。差别在严格程度:{} 会检查精度丢失,int x{90.5} 直接编译报错,而 = 和 () 会默默截断成 90。

三种初始化应该选哪种?

现代 C++ 推荐 {}(列表初始化),因为它最严格、写法在各种场景下最统一。看别人的代码时三种都要认识。

int a{} 不给值可以吗?

可以,而且有用:{} 不给初值时自动初始化为 0。int a{}; 等价于 int a = 0;,这是 {} 独有的便利。

陕ICP备2026020640号-1