XPlatformer
XPlatformer

Reputation: 1218

initializing struct with {0}

I'm debugging some code that essentially is identical to this:

struct Foo { int a; int b; };
struct Bar { Bar() {} Foo foo{0}; };

When I make an instance of Bar, it seems like both a and b are initialized to zero. Is this guaranteed? Where can I find that in the spec?

Upvotes: 8

Views: 497

Answers (1)

eike
eike

Reputation: 1334

According to cppreference.com

If the number of initializer clauses is less than the number of members [and bases (since C++17)] or initializer list is completely empty, the remaining members [and bases (since C++17)] are initialized [by their default member initializers, if provided in the class definition, and otherwise (since C++14)] by empty lists, in accordance with the usual list-initialization rules (which performs value-initialization for non-class types and non-aggregate classes with default constructors, and aggregate initialization for aggregates). If a member of a reference type is one of these remaining members, the program is ill-formed.

Foo has no default member initializers (int b{0};), so b will be initialized by list-initialization with an empty list, which means value-initialization for non-class types: b = int() // = 0.

Upvotes: 5

Related Questions