web-dev-qa-db-ja.com

C ++で「class:」とはどういう意味ですか?

今まで見たことがありません。 「:: sample」のタイプミスだと思っていたのですが、実際にコンパイルされているのを見て、とても混乱しました。誰かが私が見つけてくれるのを手伝ってもらえますか? gotoラベルではないと思います。

void f() {
  class: sample {
    // there were some members declared here
  } x;
}

これは名前のないクラスであり、コロンはsampleからプライベートに継承することを意味します。のようにそれを参照してください

class Foo : private sample
{
    // ...
};

Foo x;
80
Alexandre C.

これは、sampleから派生した名前のないクラスを定義していると思います。そして、xはその名前のないクラスの変数です。

struct sample{ int i;};

sample f() 
{
  struct : sample 
  {
    // there were some members declared here
  } x;
  x.i = 10;
  return x;
}
int main() 
{
        sample s = f();
        cout << s.i << endl;
        return 0;
}

Ideoneのサンプルコード: http://www.ideone.com/6Mj8x

PS:アクセシビリティの理由からclassstructに変更しました!

21
Nawaz

それは名前のないクラスです。

あなたはそれらを使うことができます、例えば。 C++ 11より前のローカル関数の代わりに:

int main() {
    struct {
        int operator() (int i) const {                 
            return 42;
        }
    } Nice;

    Nice(0xbeef);
}

コロンの後にsampleが続くということは、単にデフォルトの継承を使用してsampleから派生を意味します。 (構造体の場合:public、クラスの場合:private)

1
Sebastian Mach