程序源码如下:
#include <iostream>
using namespace std;
class Stu
{
public:
int x,y;
Stu();
};
Stu::Stu()
{
cout<<"stu constructor"<<endl;
}
int main()
{
Stu stu1;
//Stu stu2={1,2};
return 0;
}
这段程序没有问题,但是,如果我把main函数的注释语句去掉,程序就编译不通过,错误提示:error C2552: 'stu2' : non-aggregates cannot be initialized with initializer list。但是如果把类Stu中的构造函数Stu()定义连同构造函数的定义体一起去掉,则Stu stu2={1,2};又可以编译通过,请高人指点迷津,先谢谢了。
对不起,我刚才没有写清楚,我的目的不是让大家改正程序,而是让大家解释这样出错的原因。我想可能就是对象的初始化和构造函数的关系问题,我认为并非对象的初始化一定要调用构造函数,举个例子:
如:
#include <iostream>
using namespace std;
class Stu
{
public:
int x,y;
Stu();
};
Stu::Stu()
{
cout<<"stu constructor"<<endl;
}
int main()
{
Stu stu1;
Stu stu2=stu1;
return 0;
}在这段程序中,stu2显然是由拷贝构造函数复制的,而stu2并没有调用类的构造函数。不知道大家理解我的疑问没有,就是想知道Stu stu2={1,2};和Stu stu2=stu1;的区别与联系;