7

Cの空の構造体が制約違反になるのはなぜですか? このルールが C++ で変更されるのはなぜですか?

歴史的な理由はありますか?

4

2 に答える 2

8

Cには継承がないので、それらは必要ありません。区別可能なポインター型が必要な場合は、不完全な型へのポインターを使用できます。

struct opaque;

struct opaque* stranger = 0;

正常に動作するはずです。

于 2011-03-19T09:50:24.403 に答える
3

私の推測はこれです:

C では、継承、テンプレート、および関数のオーバーロード (C++ で空の構造体を使用する 3 つの主な理由) が、基本インターフェイスとして、テンプレート パラメーターとして、オーバーロードの解決を支援する型としてありません。

C で空の構造体を実際に使用する方法を考えられますか?

于 2011-03-19T09:29:33.183 に答える