[解決済み] なぜC++は匿名構造体を禁止しているのですか?
2022-12-10 09:34:46
疑問点
C++コンパイラの中には、標準C++の拡張として、匿名組合や構造体を許可しているものがあります。 これはちょっとした構文上の糖分であり、時折とても役に立ちます。
これが標準の一部であることを妨げる根拠は何でしょうか?技術的な障害があるのでしょうか。哲学的なものですか? それとも、それを正当化するのに十分なニーズがないのでしょうか?
これがそのサンプルです。
struct vector3 {
union {
struct {
float x;
float y;
float z;
};
float v[3];
};
};
私のコンパイラはこれを受け付けますが、次のような警告が出ます。 は C++ の非標準的な拡張です。 .
どのように解決するのですか?
他の人が指摘しているように、標準 C++ では匿名組合は許可されていますが、匿名構造体は許可されていません。
その理由は、C は匿名ユニオンをサポートしていますが、匿名構造体* はサポートしていないため、C++ は互換性のために前者をサポートしていますが、後者は互換性のために必要ないためサポートしていないのです。
さらに、C++では匿名構造体にはあまり使い道がありません。あなたが示した用途は、3 つの浮動小数点数を含む構造体を持ち、それを
.v[i]
または
.x
,
.y
そして
.z
は、C++では未定義の動作になると思います。C++では、ユニオンの1つのメンバーに対して、例えば
.v[1]
に書き込んでから、別のメンバー、例えば
.y
. このようなコードは珍しくありませんが、実際にはうまく定義されていません。
C++のユーザー定義型のための機能は、代替の解決策を提供します。例えば
struct vector3 {
float v[3];
float &operator[] (int i) { return v[i]; }
float &x() { return v[0]; }
float &y() { return v[1]; }
float &z() { return v[2]; }
};
* C11 は明らかに匿名構造体を追加しているので、C++ の将来のリビジョンで追加されるかもしれません。
関連
-
[解決済み】エラー:free(): 次のサイズが無効です(fast)。
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] using namespace std;」はなぜバッドプラクティスだと言われるのですか?
-
[解決済み] 要素ごとの加算は、結合ループよりも分離ループの方がはるかに高速なのはなぜですか?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] なぜテンプレートはヘッダーファイルでしか実装できないのですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] 0.1fを0にすると、なぜ10倍もパフォーマンスが落ちるのですか?
-
[解決済み] ミュータブル構造体はなぜ "悪 "なのか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] テスト
-
[解決済み】C++エラー。アーキテクチャ x86_64 に対して未定義のシンボル
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み] 数値定数の前にunqualified-idを付けて、数値を定義することを期待する。
-
[解決済み】'std::cout'への未定義の参照
-
[解決済み】c++で.txtファイルから2次元の配列に読み込む