Monday, September 25, 2017

C++14: Aggregate member initialization

C++14 allows ‘initializer lists’ also to be used on classes and structs that have ‘member initializers’. Missing values from the ‘initializer list’ will be taken from the ’member initializer.’ It does not work on either VS2014 or gcc version 4.9.3 20150428. Here is an example:

#include <iostream>

struct A
{
  int mVar1 = 1; // '= 1' is a member initializer.
  int mVar2 = 2; // '= 2' is a member initializer.
  int mVar3 = 3; // '= 3' is a member initializer.
};

int main()
{
     A a1;
  // A a2{91, 92, 93}; // '{91, 92, 93}' is an initializer list.
  //                      This should work for C++14, but does not
  //                      work for either VS2014 or 
  //                      gcc version 4.9.3 20150428.
     A a3{ };

     std::cout << a1.mVar1 << " " << a1.mVar2 << " " << a1.mVar3 << " ";
  // std::cout << a2.mVar1 << " " << a2.mVar2 << " " << a2.mVar3 << " ";
     std::cout << a3.mVar1 << " " << a3.mVar2 << " " << a3.mVar3 << " ";
     std::cout << std::endl;
  return 0;
}
// Output: 1 2 3 1 2 3
Reference: https://en.wikipedia.org/wiki/C%2B%2B14#Aggregate_member_initialization

No comments:

Post a Comment