一个平静的下午因为这个代码变得不平静
struct node {
int a;
vector<int> b(10, 0);
}e[100];
乍一看感觉没什么毛病,编译之后????

不让在结构体内初始化?于是我就改成了这一份代码
struct node {
int a = 2;
vector<int> b;
}e[100];
是不是心里已经开始觉得这个也会报错?可是结果是这样的

。。。。我人麻了,但是我心里还有一种想法,于是我就试了一下下面的代码

太对了太对了,于是我有个大胆的猜测,那就是:在main函数外,有构造函数的对象不可以使用构造函数进行初始化,带着这样的猜测,在网上搜报错信息,得到了专业的解答
在c++的类体中,方法以外的区域不允许有初始化,简单类型是可以的(例如int等简单类型变量,以及静态成员变量),但是有构造函数的复杂对象就不可以了(例如vector)
总结:int虽然是简单数据类型,可以用‘=’进行初始化,但是int也是一个类,也是有构造函数,所以上边的int a(2); 调用了int的构造函数,才会报出和vector一样的错。
C++ 结构体初始化之谜
博客探讨了C++中结构体初始化的问题,指出在类体外初始化含有构造函数的复杂对象如`vector`会引发错误。文章通过示例代码展示了如何正确初始化`int`和`vector`类型的成员,并得出结论:在类体外,复杂对象不能用构造函数初始化,而简单类型如`int`可以。最后,作者提出并验证了自己的猜想,总结了C++中关于对象初始化的规则。
1万+

被折叠的 条评论
为什么被折叠?



