[解決済み] このおかしなC++11の構文==> struct : bar {} foo {}; は何ですか?
2022-04-23 13:32:52
質問
C++11ではどのような意味があるのでしょうか?
struct : bar {} foo {};
解決方法は?
まず、標準的な抽象的UDT(User-Defined Type:ユーザー定義型)を取り上げます。
struct foo { virtual void f() = 0; }; // normal abstract type
foo obj;
// error: cannot declare variable 'obj' to be of abstract type 'foo'
また、UDTを定義すると同時にインスタンス化できることを思い出してみましょう。
struct foo { foo() { cout << "!"; } }; // just a definition
struct foo { foo() { cout << "!"; } } instance; // so much more
// Output: "!"
この例を組み合わせて、以下のようなUDTを定義することができることを思い出してみましょう。 名前なし :
struct { virtual void f() = 0; } instance; // unnamed abstract type
// error: cannot declare variable 'instance' to be of abstract type '<anonymous struct>'
匿名UDTについての証明はもう必要ないので、純粋仮想関数をなくしても大丈夫です。また
instance
から
foo
が残っています。
struct {} foo;
近づく。
さて、この匿名のUDTが何らかのベースに由来しているとしたらどうだろう。
struct bar {}; // base UDT
struct : bar {} foo; // anonymous derived UDT, and instance thereof
最後に、C++11 で導入された 拡張初期化子 というような、紛らわしいことができるようになります。
int x{0};
そして、これ。
int x{};
そして、最後に、これです。
struct : bar {} foo {};
これはbarから派生した無名の構造体で、fooとしてインスタンス化され、イニシャライザは空白です。
関連
-
[解決済み】Enterキーを押して続行する
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] ルール・オブ・スリーとは?
-
[解決済み] 要素ごとの加算は、結合ループよりも分離ループの方がはるかに高速なのはなぜですか?
-
[解決済み] コピーアンドスワップ慣用句とは?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] C++のPOD型とは何ですか?
-
[解決済み] C++11のT&&(ダブルアンパサンド)の意味とは?
-
[解決済み] コンストラクタのコロンメンバー(" : ")の変な構文は何ですか?
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
最新
-
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++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】浮動小数点例外エラーが発生する: 8
-
[解決済み】エラー:strcpyがこのスコープで宣言されていない
-
[解決済み】C++の余分な資格エラー
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++
-
[解決済み] スタックアロケーションにより初期化されていない値が作成された
-
[解決済み】エラー。引数リストに一致するコンストラクタのインスタンスがない