class Foo
{
public:
~Foo();
int m_val;
{
public:
~Foo();
int m_val;
};
void print()
{
Foo fo;
}
可以编译通过,仅给fo分配内存,并未初始化,若加上cout<<fo.m_val运行时会产生错误使用了未初始化的fo,说明编译器并没有合成Foo的默认构造函数,如在成员变量中加入有默认构造的classA, 编译器会合成Foo的默认构造函数。