首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++11 3.3.1p4 -声明在同一个声明区域?

C++11 3.3.1p4 -声明在同一个声明区域?
EN

Stack Overflow用户
提问于 2013-06-29 03:30:53
回答 1查看 242关注 0票数 1

在C++性病3.3.1p4中:

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

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

代码语言:javascript
运行
复制
int main()
{
    int i;
    {
        int i;
    }
}

该报价如何不适用,并使这一不正确的形式?

如果引文不适用于此,它适用于什么?

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

EN

回答 1

Stack Overflow用户

发布于 2013-06-29 03:34:54

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

实际上,3.3.1/2的代码非常类似于您自己的代码:

代码语言:javascript
运行
复制
int j = 24;
int main() {
    int i = j, j;
    j = 42;
}

在这方面,用于设置ji2424,但是外部j的作用域在,之后停止,并在}处重新启动。这两个j变量是不同的,尽管它们位于文件声明区域中,原因与您的示例相同: re是两个声明区域。

因为没有一个声明性区域,所以范围起控制作用。C++11 3.3.1/1声明(我的粗体):

每个名称都在程序文本的某一部分中引入,称为声明性区域,该区域是程序中该名称有效的最大部分,也就是说,该名称可用作引用同一实体的非限定名称。通常,每个特定名称仅在程序文本的某个(可能是不连续的部分)中有效,称为其作用域。 声明的范围与其潜在范围相同,除非潜在范围包含另一个同名声明。在这种情况下,声明在内部(包含)声明区域中的潜在范围被排除在外部(包含)声明区域的声明范围之外。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17376399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档