2

次のコードはコンパイルされます、

struct sigaction sa;
memset (&sa, 0, sizeof (sa));
sa.sa_handler = &handler;
sigaction (SIGRTMIN + 5, &sa, NULL);

しかし、省略するstructとエラーが発生します。

期待される ';' 'sa'の前

structキーワードの使用が不要なC++を使用しています。

を使用するとどのように機能しますかstruct

4

1 に答える 1

7

Cでは、構造体タグは他の名前とは別の名前空間にあるため、競合することはありませんでした。C ++では、これをサポートするために言語に特別なハックがあります。通常の関数のオーバーロードに加えて、同じスコープ内に2つの同一のシンボルを含めることができます。ただし、1つはクラスタイプまたは列挙型を指定するタイプ名です。名前が検索されると、コンパイラは、名前がクラスキー(、、または)またはキーワードの直後に続かない限り、型名ではないものを選択ます。classstructunionenum

于 2013-01-08T10:53:51.107 に答える