1

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

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

ColorProperties myProperties;

myProperties自动包含结构所注明的元素值吗?

4

1 回答 1

4

是的你可以。这是 C++11 的特性。真的等于

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

   //
};

您可以在此处阅读有关此提案的信息

来自标准的报价。

n3376 12.6.2/8

在非委托构造函数中,如果给定的非静态数据成员或基类不是由 mem-initializer-id 指定的(包括由于构造函数没有 ctor-initializer 而没有 mem-initializer-list 的情况)并且实体不是抽象类(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
};
于 2013-04-09T09:33:45.787 回答