[解決済み] 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++は、柔軟性を持つ側を 設計者 の代わりに、設計者は型を正しく使うことを容易にし、間違って使うことを困難にすることができます。設計者がコンストラクタやクラス内イニシャライザなどを決定するのです。
関連
-
[解決済み】C++の余分な資格エラー
-
[解決済み] 配列のベクトルを扱う正しい方法
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] 0.1fを0にすると、なぜ10倍もパフォーマンスが落ちるのですか?
-
[解決済み] Cプリプロセッサはなぜ "linux "という単語を定数 "1 "と解釈するのですか?
-
[解決済み] noexceptを本当に使うべきはいつですか?
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
-
[解決済み】CとC++におけるユニオンの目的
-
[解決済み】派生クラスでオーバーライドされた関数が、ベースクラスの他のオーバーロードを隠してしまうのはなぜですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み】抽象クラス型の無効なnew-expression
-
[解決済み] クラスにデフォルトコンストラクタが存在しない。
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】C++の余分な資格エラー
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み】C++ 構造体の初期化