第3.2章: 复合语句
复合语句
复合语句是用花括号括起来的一组语句:
{
;
;
}
花括号 { } 让若干条语句表现得像一条单一语句。
复合语句内部的局部变量
复合语句同时也创建了一个作用域。
在花括号内声明的变量,在遇到收尾的 } 时被销毁。
{
::std::uint_least32_t v{};
v = 5; // OK: v exists here
}
v = 6; // ERROR: v was destroyed at the }
代码块结束后,v 就不再存在了。
名字遮蔽
如果你在内层作用域中声明了同名的变量, 它会遮蔽外层的那个:
::std::uint_least32_t v{1};
{
::std::uint_least32_t v{2}; // shadows the outer v
// this v is different
}
遮蔽是合法的,但常常令人困惑。 如果你启用以下选项,编译器可以给出警告:
-Wshadow
我们建议始终启用这个警告。
要点
- 复合语句:
{ }把多条语句组合成一条。 - 作用域:复合语句会创建一个新作用域。
- 生命周期:在
{ }内声明的变量在收尾花括号处被销毁。 - 名字遮蔽:内层变量可以隐藏外层变量;这合法但容易混淆。
- 警告:启用
-Wshadow以发现意外的名字遮蔽。