Initializing with Designated Initializers

Example:

C++




#include <iostream>
using namespace std;
  
struct Date {
    int day;
    int month;
    int year;
};
  
int main()
{
    Date dt{ .day = 24, .month = 4, .year = 2023 }; // dt.day = 24, dt.month = 4, dt.year = 2023
      
      cout << "Month : " << dt.month << "\n";
    cout << "Year : " << dt.year << "\n";
    cout << "Day : " << dt.day;
      return 0;
}


Output

Month : 4
Year : 2023
Day : 24

Example:

C++




// C++ program to initialize a subset of members of a struct
// using designated initializers
#include <iostream>
using namespace std;
  
struct Rectangle {
    int length;
    int width;
    int height;
};
  
int main()
{
    Rectangle rect = { .length = 10, .width = 5 };
    cout << " Length : " << rect.length << "\n";
    cout << " Width : " << rect.width << "\n";
    cout << " Height : " << rect.height;
    return 0;
}


Output

 Length : 10
 Width : 5
 Height : 0


Designated Initializers in C++ 20

With C++20, we get a convenient way of initializing data members. The new feature is called Designated Initializers and it might be familiar to C programmers. In other words, Designated Initializers are a new feature that has been introduced in C++20. It allows developers or programmers to initiate data members of a struct or an array in any order they want, providing a more readable and flexible way of initializing data members. 

In C++20, a Collection type is defined as an array type or a class type that meets certain criteria. A Collection type shouldn’t have any private or protected direct non-static data members, user-declared or inherited constructors, virtual, private, or protected base classed or virtual member functions. This definition helps to identify and distinguish Collection types from other types in C++.

Syntax:

struct_type obj_name = { 
    .member1 = value1, .member2 = value2, member3 = value3, ...... .memberN = valueN 
};

Where,

  • struct_type: The name of the struct type.
  • obj_name: The name of the object being initialized.
  • member1 to memberN: The names of the data members being initialized.
  • value1 to valueN: The values being assigned to the corresponding data members.
  • We use the dot operator (.) followed by the member name to specify the member we want to initialize.

Similar Reads

Why to use Designated Initializers?

Designated Initializers increase readability. It is a convenient way of initializing data members. Designated Initializers help to identify and distinguish Collection types from other types in C++....

Advantages of Designated Initializers

...

Initializing with Designated Initializers

Designated Initializers in C++20 offer several benefits:...