结构/类的对象(没有 构造函数)可以使用一个 初始化列表. 。为什么不允许在结构/类上 构造函数?

struct r { int a; };
struct s { int a; s() : a(0) {} };
r = { 1 }; // works
s = { 1 }; // does not work
有帮助吗?

解决方案

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

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

其他提示

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top