命名空间作用域vs类内部作用域
Namespace scope vs scope inside class
有这样的代码:
namespace N {
struct B {
void f() {
i;
j;
}
int i;
};
int j;
}
int main() {
return 0;
}
找到了变量i
,但没有找到变量j
。它是如何工作的,类中的变量可以在声明之前使用,但相同的不工作命名空间?如何找到i
-编译器首先解析所有类以找到所有成员,然后将其与成员函数的引用绑定?
确实,成员函数体(以及变量初始化式)在类定义之后的阶段处理。通过尝试在其他成员声明中使用成员,您可以自己检查"先声明后使用"规则对类成员是否仍然完全有效:
struct B
{
char c[sizeof i];
int i;
};
示范:http://ideone.com/v1ksio
struct B2
{
decltype(i) f();
int i;
};
这也会影响类本身的使用,因为它需要一个完整的类型。
struct B
{
static char c[sizeof (B)];
};
示范:http://ideone.com/Z9XOzm
但是这是可以的,因为变量初始化是在构造定义时处理的,此时所有成员都是已知的,并且类型是完整的:
struct B
{
unsigned r{sizeof s};
unsigned s{sizeof (B)};
};
相关文章:
- 未在作用域中声明unordered_map
- 有没有一种方法可以在编译时获得作用域类名
- C++quit()函数中可能存在作用域问题
- 未在此作用域OpenCV3.4中声明cvSaveImage
- 全局作用域中函数指针的赋值
- 在类函数中初始化外部作用域变量
- 不同作用域中的静态变量和全局变量
- 是同一作用域的函数部分中的函数调用
- 未在此作用域中声明的函数和变量 (C++)
- 类作用域的类型别名"using":[何时]方法中的用法可以先于类型别名?
- 将作用域枚举转换为基础类型
- 表达式必须具有完整或无作用域的枚举图
- 不带内部作用域的 if 语句
- 为什么内联函数看不到作用域内部?
- C++:类内部结构的作用域
- C++中类内部的类的作用域是什么
- 内部作用域枚举、哈希函数和无序集数据成员
- 内部结构在非命名空间作用域中的显式专用化
- 命名空间作用域vs类内部作用域
- 如何从函数内部修改作用域变量