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; } |
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; } |
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.