79

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

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

3 に答える 3

82

これは名前のないクラスであり、コロンは からプライベートに継承することを意味しsampleます。みたいに見る

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

Foo x;
于 2011-01-17T11:55:24.093 に答える
21

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

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:アクセシビリティの理由から変更classしました!struct

于 2011-01-17T11:59:38.670 に答える
2

名前のないクラスです。

たとえば、C++11 より前のローカル関数の代わりに使用できます。

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

    nice(0xbeef);
}

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

于 2011-12-06T11:20:32.680 に答える