C++11 3.3.1p4 - 同一声明区域中的声明

C++11 3.3.1p4 - Declarations in same declarative region?

本文关键字:声明 区域 1p4 C++11      更新时间:2023-10-16

在C++标准3.3.1p4中:

给定单个声明区域中的一组声明,每个声明指定相同的非限定名称,它们应全部引用同一实体。

在下文中,两个int声明不是位于同一声明区域中,指定相同的非限定名称并引用两个不同的实体吗?

int main()
{
    int i;
    {
        int i;
    }
}

报价如何不适用并使其格式不正确?

如果报价不适用于此,它适用于什么?

(请注意,第一个i的声明性区域确实包括第二个i,如 3.3.1p2 中的示例所示。

它们不在同一个声明性区域中。i的声明区域仅限于最内侧的大括号内。

事实上,3.3.1/2的代码与你自己的代码非常相似:

int j = 24;
int main() {
    int i = j, j;
    j = 42;
}

在这种情况下,用于设置ij24,但该外部j的范围在,后停止并在}处重新启动。这两个j变量是不同的,尽管它们位于文件声明区域中,原因与您的示例相同:re 是两个声明性区域。

由于没有单个声明性区域,因此范围将控制。 C++11 3.3.1/1声明(我的粗体(:

每个名称都引入到程序文本的某个部分,称为声明性区域,声明性区域是该程序中该名称有效的最大部分,也就是说,在该部分中,该名称可以用作非限定名称来引用同一实体。通常,每个特定名称仅在程序文本的某些可能不连续的部分(称为其范围(内有效。

声明的作用域与其潜在作用域

相同,除非潜在作用域包含另一个同名声明。在这种情况下,声明在内部(包含(声明性区域中的潜在范围被排除在外部(包含(声明区域中的声明范围之外。

这里重要的是possibly discontiguous,内部i(在您的示例中("消除"或隐藏外部i,即使外部声明区域可能包围内部声明区域。