第3.2章: 复合语句

English

复合语句

复合语句是用花括号括起来的一组语句:

{
    ;
    ;
}

花括号 { } 让若干条语句表现得像一条单一语句。

复合语句内部的局部变量

复合语句同时也创建了一个作用域。 在花括号内声明的变量,在遇到收尾的 } 时被销毁。


{
    ::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

我们建议始终启用这个警告。

要点