2

(6.2.3 / 1)C99標準から

--構造体、共用体、および列挙型のタグ(struct、union、またはenumというキーワードのいずれか*に従うことで明確になります)。

*脚注:タグの名前空間は3つですが、名前空間は1つだけです。

これで、C ++では、次のようなエンティティの競合を回避するために名前空間を使用することがわかりました。

namespace foo {
     struct bar // ..define bar..
};

namespace foo2 {
     struct bar // ..define bar..
};

Cでは、struct、union、enumは名前空間としてどのように機能しますか?また、脚注は、名前空間が3つではなく1つしかないことを意味しますか?

4

1 に答える 1

3

構造体、共用体、および列挙型のタグには個別の名前空間があるため、

struct foo {
    int bar;
};
double foo;

タグの名前空間は識別子の名前空間とは別のものだからです。タグの名前空間が 1 つしかないということは、

struct foo {
    int bar;
};
union foo {
    double baz;
    long quux;
}

同じ範囲で。

于 2012-11-25T03:13:31.137 に答える