【发布时间】:2010-10-27 17:49:29
【问题描述】:
我一直认为,只有两个默认构造函数:没有参数的构造函数和复制构造函数。
但今天我写的是这样的:
首先我想确保在 C++ 中以 c 样式初始化结构仍然有效..
struct Foo{
int a;
bool b;
char* c;
double d;
};
//..
Foo arr[2]={{0, true, "a", 3.14}, {1, false, "z", 42.0}};
好的,这行得通。但接下来,我决定检查一下将struct 更改为class 后会发生什么。
class Bar{
public:
int a;
bool b;
char* c;
double d;
};
//..
Bar arr[2]={{0, true, "a", 3.14}, {1, false, "z", 42.0}};//works
Bar bar; //works
Bar bar2=arr[1]; //works
//Bar bar3(2, false, "so", 7.0); //of course doesn't work
//first, second, third ways works...
只要class Bar 没有任何私有/受保护字段(但它可以包含方法),它就可以编译。所以,只要编译器可以创建只使用结构简单特征的类,就可以编译。
第一个问题:我说的对吗?
第二个问题:它是编译器(在这种情况下为 gcc)的特性还是这正是标准所说的?
[编辑]:
代码//Bar bar3(2, false, "so", 7.0); //of course doesn't work 在这里不是问题;)
PS。我仍在学习英语,但有时我会犯愚蠢的错误。我正在尽我所能,用英语写问题和答案,但是如果你能编辑我的帖子以防出现任何错误,我会非常高兴。我保证,你的努力不会白费。
【问题讨论】:
标签: c++ class constructor struct