并非完全。
In C++, a scope is generally determined by pair of opening and closing braces: {
and }
, this includes:
- namespaces
- classes and structs
- functions and methods
- simple "blocks" within functions or methods
然而,一些声明有少数例外或特殊性,这些声明可能会带来一些变量,这些变量将在其眼前的范围之内:
for (int i = 0; i < 10; ++i) {
// i accessible here
}
while (int c = getchar()) {
// c accessible here
}
try {
// ...
} catch(std::exception const& e) {
// e accessible here
}
void foo(int i) {
// i accessible here
}
并且有最令人惊讶的<代码>。
if (int var = /**/)
{
// var is accessible here
}
else
{
// var is accessible here too!
}
这些范围是:
由于C规则(C++也遵循)使<代码>{<>/代码>和<代码>>>>>>>>>>>>>在表述中选取:
for (int i = 0; i < 10; ++i) std::cout << i << "
";
// i no longer accessible here
模板参数也有其范围:这些参数在申报点活到生命,直到其课目或职能结束。
template <typename U>
void foo() {
} // U accessible up until this point
最后,还有“最外部”的范围,即全球名称空间,即“可支配”范围。