将struct元素设置为定义中的值

时间:2013-04-09 09:31:32

标签: c++

编译器似乎对此没有任何问题。我可以安全地假设我创建的此类型的任何对象都具有这些默认值吗?

struct ColorProperties
{
   bool colorRed    = true;
   bool colorBlue   = false;
   bool isRectangle = true;
};

ColorProperties myProperties;

myProperties会自动包含结构所指示的元素值吗?

1 个答案:

答案 0 :(得分:4)

是的,你可以。这是C ++ 11的功能。真的,它等于

struct ColorProperties {
   ColorProperties()
      : colorRed(true), colorBlue(false), isRectangle(true)
   {}

   //
};

您可以阅读此提案here

标准报价。

n3376 12.6.2 / 8

在非委托构造函数中,如果给定的非静态数据成员或基类未由a指定 mem-initializer-id(包括没有mem-initializer-list的情况,因为构造函数没有 ctor-initializer)并且实体不是抽象类的虚拟基类(10.4),然后是

- 如果实体是具有支撑或等于初始化程序的非静态数据成员,则实体初始化 如8.5中所述;

struct A {
   A();
};

struct B {
   B(int);
};

struct C {
   C() { }

   A a;
   const B b; // error: B has no default constructor
   int i;     // OK: i has indeterminate value
   int j = 5; // OK: j has the value 5
};