int i;
void f()
{
int i{};
{
int a = i; // local or global 'i'?
}
}
我的问题不是选择哪种
i
,因为很明显这是本地的,而是在标准中指定的位置。我能找到的最接近的规则是[basic.lookup.unqual]p6,它说:
但是,它只是说必须在使用前的某个时间声明名称。这不是我想要的。同一段中的示例使所有内容变得更加清晰,因为它说明了按什么顺序搜索哪些范围,但这只是一个示例,因此不是主格。
[basic.lookup.unqual]中的所有其他段落不适用于非成员函数。所以我的问题是该标准在哪里指定?
最佳答案
在[basic.scope.declarative]中,我们有:
(强调我的。)
在你的
int a = i;
例如,
i
必须引用本地i
,因为全局i
实际上不在此范围内。就像[basic.lookup.unqual]开头所说:
但是,如果只在一个范围内声明一个声明,我们选择哪种搜索顺序都没有关系。