1. ホーム
  2. c++

[解決済み] C++11 はなぜ C99 のような指定イニシャライザーリストをサポートしないのですか?[クローズド]

2022-06-08 04:29:13

質問

を考えてみましょう。

struct Person
{
    int height;
    int weight;
    int age;
};

int main()
{
    Person p { .age = 18 };
}

上記のコードは、C99では合法ですが、C++11では合法ではありません。

は何だったのでしょうか? c++11 標準委員会がこのような便利な機能のサポートを排除する根拠は何だったのでしょうか?

どのように解決するのですか?

C++にはコンストラクタがあります。もし、1つのメンバーだけを初期化することに意味があるならば、適切なコンストラクタを実装することによって、それをプログラム内で表現することができます。これがC++が推進する抽象化の一種です。

一方、指定されたイニシャライザの機能は、クライアントコードで直接アクセスしやすいようにメンバーを公開することに重点を置いています。これは、年齢が18(歳?)だが身長と体重がゼロの人物を持つような事態を招きます。


言い換えれば、指定されたイニシャライザは、内部が公開され、クライアントがその型をどのように使用したいかを決める柔軟性を与えられるプログラミングスタイルをサポートします。

C++は、柔軟性を持つ側を 設計者 の代わりに、設計者は型を正しく使うことを容易にし、間違って使うことを困難にすることができます。設計者がコンストラクタやクラス内イニシャライザなどを決定するのです。