C ++:struct / class中的构造函数与初始化列表

时间:2010-01-19 18:01:27

标签: c++ class constructor struct initializer-list

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

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

2 个答案:

答案 0 :(得分:14)

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

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

答案 1 :(得分:0)

如果你的问题是你的意思,“我可以这样做:”

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

...然后答案是否定的。 C ++不允许这样做。