【一人 C++20 Advent Calendar 2019】指示付き初期化【7日目】

一人 C++20 Advent Calendar 2019 8日目の記事になります。

指示付き初期化

C++20 では {} で初期化する場合に任意のメンバ変数を指定して初期化する事が出来ます。

#include <iostream>
#include <string>

struct user{
    int id = -1;
    std::string name;
    int age;
};

int
main(){
    // メンバ変数名を指定して初期化出来る
    auto homu = user { .id = 1, .name = "homu", .age = 14 };

    std::cout << homu.id << std::endl;
    std::cout << homu.name << std::endl;
    std::cout << homu.age << std::endl;
    std::cout << "---" << std::endl;

    // メンバ変数名を指定しなった場合は何もされない
    auto mami = user { .name = "mami", .age = 15 };

    std::cout << mami.id << std::endl;
    std::cout << mami.name << std::endl;
    std::cout << mami.age << std::endl;

    return 0;
}
/*
output:
1
homu
14
---
-1
mami
15
*/

こんな感じで初期化する事が出来ます。
元々は C言語にあった機能で C++ にもめちゃくちゃほしかったんですよね。
これを使うといろいろな事ができそうですね!

参照