問題タブ [empty-class]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
1024 参照

c++ - ハンドルの比較: 空のクラス vs. 未定義のクラス vs. void*

Microsoft のGDI+は、内部でハンドルとして扱われる多くの空のクラスを定義します。たとえば、(ソースGdiPlusGpStubs.h

ハンドルを定義するには、他に 2 つの方法があります。彼らは、

これらの各アプローチの長所と短所を知りたいだけです。

Microsoft のアプローチの利点の 1 つは、空のクラスを使用してハンドルのタイプ セーフな 階層を定義できることです。これは (私が思うに) 他の 2 つのアプローチでは不可能ですが、この階層が実装にどのような利点をもたらすのでしょうか? とにかく、他に何?

編集:

2 番目のアプローチ (つまり、不完全なクラスを使用する) の利点の 1 つは、クライアントがハンドルを逆参照するのを防ぐことができることです (つまり、このアプローチはカプセル化を強力にサポートしているように見えます)。ハンドルを逆参照しようとすると、コードはコンパイルされません。ほかに何か?

ハンドルを逆参照できないという 3 番目のアプローチにも同じ利点があります。

0 投票する
8 に答える
11875 参照

java - C ++、javaの空のクラスのサイズはどれくらいですか?

C ++およびJavaの空のクラスのサイズはどれくらいですか?なぜゼロではないのですか? sizeof();C++の場合は1を返します。

0 投票する
1 に答える
296 参照

c++ - C ++ 03で空のクラスを検出できますか?

重複の可能性:
クラス/構造体にデータメンバーがないかどうかを簡単に判断する方法はありますか?

おそらくテンプレートを使用して、emplyクラスを検出できますか?

C ++ 0xではなく、C ++ 03のみ!

0 投票する
2 に答える
650 参照

c++ - 空のクラスのconstオブジェクトを作成できない理由

上記のコードはコンパイルできませんが、その理由を教えてもらえますか?

0 投票する
4 に答える
69576 参照

python - Python の空のクラス オブジェクト

オブジェクト指向プログラミングの Python クラスを教えていて、クラスの説明方法をブラッシュアップしていると、空のクラス定義が表示されました。

次に、このクラスのオブジェクトの名前とその他の属性を定義します。

面白い!

このようなクラスのインスタンスに対して関数を動的に定義する方法があるかどうか疑問に思っていますか? 何かのようなもの:

これは私の Python インタープリターでは機能しませんが、別の方法はありますか?

0 投票する
3 に答える
2155 参照

c++ - 空の基本クラスの最適化 (EBO) が MSVC で機能しないのはなぜですか?

Visual C++ で空の基本クラスの最適化 (EBO) が完全に適用されないのはなぜですか?

多くの基本クラスがある場合、コンパイラがこの最適化を行うのを助ける方法はありますか?

0 投票する
4 に答える
26540 参照

c# - 空のオブジェクトの生成 - 空のプロパティ/サブクラスを持つ空のクラス C#

私は2つのクラスを持っています:

ヒューマンの新しいインスタンスを作成したい場合は、やらなければなりませんが、そのHuman person = new Human(); ようにアクセスしようとするとperson.properties.prop1=1;、プロパティに nullRefrence があり、新しいプロパティも作成する必要があるためです。私はそのようにしなければなりません:

そして今、私はこれにアクセスできますperson.properties.prop1=1;

これは小さな例ですが、xsd から生成された巨大なクラスがあり、この「人」クラスとそのすべてのサブクラスを手動で生成する時間があまりありません。プログラムでそれを行う方法はありますか、それともそのためのジェネレーターがありますか?

または、クラスをループして、すべてのプロパティに対して新しいクラス typeof プロパティを作成し、それを親クラスに結合できますか?

ありがとう!

0 投票する
1 に答える
3069 参照

c++ - C++ 例外が空のクラスをスローする

以下は、「プログラミング: C++ を使用した原則と実践」からの抜粋です。throw Bad_area()表記に混乱しています。この本はそれを説明しようとしています。この説明は代入表記と一致しません。int x=1 == int x(1); またはBad_area x; .

コード例 (try ブロックをコメントアウト):

0 投票する
1 に答える
613 参照

c++ - 完全に空のクラスについて

その出力は次のとおりです。

0 0 0

0xbff36ad0 0xbff36ac8

要素数: 4

結果はとても驚くべきものです。

上記のように、Empty はクラスであり、そのサイズとそのオブジェクトはすべて 0 です。なぜですか?

たぶん、空のクラスのサイズは 1 であり、クラスが空でない場合、そのサイズはメンバーによって決定されるためだと思いますが、ここではそのメンバーは特別であり、長さゼロの配列であり、この配列のサイズは 0 です。クラスとオブジェクトのサイズはすべて 0 です。

それは私の推測です。プログラムを実行すると、2 つのオブジェクトの両方にアドレスがあり、アドレスが異なることがわかります。

ここで私の質問です: サイズが 0 のオブジェクトを実装できる場合、なぜ C++ 標準は空のオブジェクトが sizeof() = 1 であると述べているのですか? それは「2 つの異なるオブジェクトのアドレスが異なることを保証するため」のためですゼロではない空のクラスの?、しかし今、出力として異なるアドレスがあります。これはどのように起こりますか?

さらに、配列セットのサイズに関係なく、最後の行の出力は常に 4 です。なぜですか?

ありがとう :)

PS: このプログラムは MacOS で実行しています。コンパイラは Apple LLVM バージョン 5.1 (clang-503.0.40) (LLVM 3.4svn ベース) です。

0 投票する
3 に答える
4019 参照

c++ - C++ が空のクラスで記述して呼び出す関数は何ですか?

『 Effective C++』という本の中で、以下の一節を見ました。

その結果、あなたが書くならば

これは、次のように記述した場合と本質的に同じです。

次のコードにより、各関数が生成されます。

しかし、上記のコードをコンパイルして作成された実行可能ファイルを逆アセンブルした後、そうではないことに気付きました。呼び出されている関数はありません。

主なアセンブリ コードは次のとおりです。

.textセグメントに「空」という名前の関数はありません。

では、コンストラクターまたは空のクラスの割り当てを呼び出した後のコンパイラーの動作は実際にはどうなるのでしょうか? 本が言ったように、それはいくつかの機能を生成しますか? もしそうなら、それらはどこに保管されていますか?