C++11 3.3.1p4 - 同一声明区域中的声明
C++11 3.3.1p4 - Declarations in same declarative region?
在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;
}
在这种情况下,用于设置i
的j
是24
,但该外部j
的范围在,
后停止并在}
处重新启动。这两个j
变量是不同的,尽管它们位于文件声明区域中,原因与您的示例相同:re 是两个声明性区域。
由于没有单个声明性区域,因此范围将控制。 C++11 3.3.1/1
声明(我的粗体(:
每个名称都引入到程序文本的某个部分,称为声明性区域,声明性区域是该程序中该名称有效的最大部分,也就是说,在该部分中,该名称可以用作非限定名称来引用同一实体。通常,每个特定名称仅在程序文本的某些可能不连续的部分(称为其范围(内有效。
声明的作用域与其潜在作用域相同,除非潜在作用域包含另一个同名声明。在这种情况下,声明在内部(包含(声明性区域中的潜在范围被排除在外部(包含(声明区域中的声明范围之外。
这里重要的是possibly discontiguous
,内部i
(在您的示例中("消除"或隐藏外部i
,即使外部声明区域可能包围内部声明区域。
相关文章:
- .cpp和.h文件中的模板专用化声明
- 未在作用域中声明unordered_map
- C++避免重复声明的语法是什么
- 如何确保C++函数在定义之前声明(如override关键字)
- 错误:未在此范围内声明'reverse'
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 为什么在定义函数之前先声明它
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- #ifdef和未声明的标识符
- 没有显式声明的int[]中的foreach
- 在基于范围的for循环中使用结构化绑定声明
- 在将变量声明为引用时,堆在释放后使用
- C++:无法访问声明的受保护成员
- 为什么我不能在一个类的不同行中声明和定义成员变量?
- 无法正确访问在另一个类的私人区域内声明的类
- C++11 3.3.1p4 - 同一声明区域中的声明
- 在函数外声明并行区域后的OpenMP缩减
- 在同一声明性区域中定义的两个未命名的名称空间
- 声明性区域的实际定义是什么?
- 声明性区域和范围有什么区别