首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一定聚合成默认构造函数吗

2012-09-04 
一定会合成默认构造函数吗?我看“深度探索C++对象模型”上说,“只有4种情况,编译器才会合成一个默认构造函数,

一定会合成默认构造函数吗?
我看“深度探索C++对象模型”上说,“只有4种情况,编译器才会合成一个默认构造函数,除此之外而又没有声明任何构造函数的类,也不会合成默认构造函数。”,还有一句“任何类如果没有定义默认构造函数,就会被合成出一个来,这是有误解的”。怎么去理解呢?是不是意味着编译器不一定会为没有显示定义构造函数的类合成默认构造函数?有什么办法能验证吗?

[解决办法]

探讨
引用:
要验证请用反汇编……
最简单
class A
{
int i;
};

int main()
{
A a;
return 0;
}

这样的类就可以不合成默认构造函数,因为没有必要


但是我看Effective c++ 说会为一个空类生成默认构造函数~这不是矛盾的吗?

[解决办法]
探讨
引用:
要验证请用反汇编……
最简单
class A
{
int i;
};

int main()
{
A a;
return 0;
}

这样的类就可以不合成默认构造函数,因为没有必要


但是我看Effective c++ 说会为一个空类生成默认构造函数~这不是矛盾的吗?

[解决办法]
探讨
我看“深度探索C++对象模型”上说,“只有4种情况,编译器才会合成一个默认构造函数,除此之外而又没有声明任何构造函数的类,也不会合成默认构造函数。”,还有一句“任何类如果没有定义默认构造函数,就会被合成出一个来,这是有误解的”。怎么去理解呢?是不是意味着编译器不一定会为没有显示定义构造函数的类合成默认构造函数?有什么办法能验证吗?

[解决办法]
个人感觉这个东西还是和编译器的具体实现有关,就像下面的例子会在VS2010里面报访问违例:
C/C++ code
class A{public:    int i;    //virtual void test() {}};int main(){    A a;    cout<<a.i<<endl;} 

热点排行