0

考虑这段代码:

class Test
{
public:

Test() { i = 0;  }

private:

int i;
};

数据成员 'i' 甚至在它被声明/定义之前就被使用了。这不应该是编译错误吗?(它编译得很好!!!)

4

3 回答 3

1

规则是在类定义中定义的成员函数被编译,就好像它们是在类定义之后立即定义的。

于 2012-03-20T08:29:03.537 回答
0

不,它不应该在类定义的上下文中,所有成员、数据成员或函数都具有完全的可见性。

于 2012-03-20T08:29:25.497 回答
0

声明前使用的数据成员在哪里?

class Test
{
public:

Test() { i = 0;  } // constructor

private:

int i;  //datamemeber
};
main()
{
Test obj; // memory allocated only here
}

只有在 main 中创建了 obj 后才会调用构造函数。然后分配 i 的内存。并调用构造函数,因此 i 有范围和可见性

于 2012-03-20T08:29:44.347 回答