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