考虑这段代码:
class Test
{
public:
Test() { i = 0; }
private:
int i;
};
数据成员 'i' 甚至在它被声明/定义之前就被使用了。这不应该是编译错误吗?(它编译得很好!!!)
考虑这段代码:
class Test
{
public:
Test() { i = 0; }
private:
int i;
};
数据成员 'i' 甚至在它被声明/定义之前就被使用了。这不应该是编译错误吗?(它编译得很好!!!)
规则是在类定义中定义的成员函数被编译,就好像它们是在类定义之后立即定义的。
不,它不应该在类定义的上下文中,所有成员、数据成员或函数都具有完全的可见性。
声明前使用的数据成员在哪里?
class Test
{
public:
Test() { i = 0; } // constructor
private:
int i; //datamemeber
};
main()
{
Test obj; // memory allocated only here
}
只有在 main 中创建了 obj 后才会调用构造函数。然后分配 i 的内存。并调用构造函数,因此 i 有范围和可见性