9

可以使用初始化列表创建结构/类的对象(没有构造函数) 。为什么在带有构造函数的结构/类上不允许这样做?

struct r { int a; };
struct s { int a; s() : a(0) {} };
r = { 1 }; // works
s = { 1 }; // does not work
4

2 回答 2

14

不,具有构造函数的对象不再被视为 POD(普通旧数据)。对象只能包含其他 POD 类型作为非静态成员(包括基本类型)。POD 可以具有静态函数和静态复杂数据成员。

请注意,即将到来的 C++ 标准将允许您定义初始化列表,这将允许使用大括号初始化非 POD 对象。

于 2010-01-19T18:04:06.623 回答
0

如果您的问题是要问,“我可以这样做吗:”

struct MyGizmo
{
  char things_[5];
  MyGizmo() : things_({'a', 'b', 'c', 'd', 'e'}) ();
};

……那么答案是否定的。C++ 不允许这样做。

于 2010-01-19T18:11:13.550 回答