N4567 中的 §3.3.7/4 是多余的吗?
Is §3.3.7/4 from N4567 redundant?
根据N4567,3.3.7第4段,
延伸到类定义末尾或超过类定义末尾的声明的潜在范围也延伸到其成员定义定义的区域,即使成员是在类外部词汇定义的。。。
然而,我认为没有必要明确说明,因为无论其词汇定位如何,这样的成员定义都必须在声明的范围内。换言之,似乎不存在这种成员定义超出声明范围的情况。参见以下示例:
int always_visible=10;
class some {
int foo(void);
};
int some::foo(void) {
// no ambiguity occurs because its member definition
// is always in the scope of always_visible.
return always_visible;
}
我认为它的成员定义不可能在声明always_visible之前,在这种情况下,上面的措辞可能有用。那么,为什么需要澄清呢?
将扩展到类定义末尾的声明的潜在范围也扩展到其成员定义的主要情况是,当有问题的声明是该类的成员时:
class C {
int x;
int f();
};
int C::f() {
return x;
}
x
在C::f
的定义中使用时处于作用域中,但在C
的右大括号之后就不在作用域中了。
";或超过终点";部分嗯,它很容易发生在嵌套类中:
class Outer {
static int x;
class Inner {
int f();
};
};
int Outer::Inner::f() {
return x;
}
这里,由于x
的潜在作用域延伸到了Inner
定义的末尾,一直延伸到Outer
定义的末尾。因此,x
也在Inner
成员定义的作用域中。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- .cpp和.h文件中的模板专用化声明
- 反向给定链表中的K节点
- 正在查找文档以获得PS4平台的C++中的设备信息
- enum是C++中的宏变量还是整数变量
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 将字符串存储在c++中的稳定内存中
- 文本文件中的单词链表
- 递归函数计算序列中的平方和(并输出过程)
- 阵列初始化器中的多余元素
- 仅使用 <iostream>、 <fstream> 和 <cstdlib>清除字符串中的任何多余空格
- 此宏中的if-else是否多余
- 聚合初始值设定项中的多余元素
- N3.3.7/1 节中的规则 3936 是否多余
- N4567 中的 §3.3.7/4 是多余的吗?
- 填充字节发现以及数组初始值设定项中多余元素的常见和特殊编译器行为
- 数组初始化器中的多余元素
- 标量初始化器代码中的多余元素可以用gcc编译,但不能用g++
- (cin >> buf && !buf.empty()) 中的第二个条件是多余的吗?
- 从字符串中删除多余空格的程序