编译器似乎对此没有任何问题。我可以安全地假设我创建的此类型的任何对象都具有这些默认值吗?
struct ColorProperties
{
bool colorRed = true;
bool colorBlue = false;
bool isRectangle = true;
};
ColorProperties myProperties;
myProperties
会自动包含结构所指示的元素值吗?
答案 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
};