请教,类一定有构造函数吗
书上说只有4种情况下,编译器才会为类合成一个默认构造函数,那这4种情况外,如果用户没定义构造函数,编译器又不会合成默认构造,这个类岂不是没有构造函数?
比如
class A
{
public:
int x;
};
这样A a;此时定义a,有没有相应的构造函数被调用到?以前一直以为有,直到今天膝盖中了一箭。。。
[解决办法]
也有,叫trivial constructor
没有实际代码,但概念上存在
[解决办法]
理论上类肯定是有构造函数的,但是至于编译器要做什么样的优化那是另外一回事了。
[解决办法]
编译器在编译的时候可能内部会给出一个,但它不做任何实际的操作,最终代码里不会有任何体现。
如果那么简单的一个类编译器也非要强行给它生成一个莫名其妙的构造程序,而其完成的任务就是每次一被调用就立即返回......写编译器的人就这么无聊?没事就和CPU闹着玩?
从理解上可以这么认为:类都是有构造函数的,哪怕它什么也不做。但具体实现上也这么做就太搞笑了。