【问题标题】:C++: Constructor versus initializer list in struct/classC ++:结构/类中的构造函数与初始化列表
【发布时间】:2011-01-06 22:26:19
【问题描述】:

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

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

【问题讨论】:

  • 发布一些代码来说明您的问题。
  • 尼尔,我的回答很有意义。

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


【解决方案1】:

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

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

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

【讨论】:

  • 不,初始化字符数组不同于初始化可以包含不同类型变量的 POD 结构。此外,您正在使用 ctor,OP 要求对具有已定义 ctor 的对象进行初始化。
  • 实际上,g++ 可以做到这一点,而不是标准:(char[1]){ 0 }
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    • 2012-04-11
    • 1970-01-01
    • 2015-08-08
    相关资源
    最近更新 更多