1

重複の可能性:
コンパイラが冗長スコープの資格をサポートしているのはなぜですか?それは合法ですか?

私は実際に次のようなコードを書くことができますか

class Foo
{
public:
    Foo();
};

Foo::Foo::Foo::Foo::Foo::Foo() {}

gccはそれをコンパイルします。この機能を追加する理由は何ですか?

4

1 に答える 1

3

この機能は、型の名前がクラススコープ内に挿入されることです。つまり、クラスtypedef Foo Foo;内に暗黙のソートがありFooます。

いくつかの構成ではネストされた型が必要なため、この機能は言語にあります。たとえば、オーバーライドを選択する階層のレベルに明示的に名前を付けて動的ディスパッチを無効にする場合(obj.Base::f())。

元のリストには、名前が存在する必要のある10個の奇妙な構造があり、ネストされた名前をすべてのコンテキストで使用できるようにすることで簡略化されました。つまり、作成した面白い構文が可能になります。

于 2012-08-29T17:07:49.217 に答える