今まで見たことがありません。「::sample」のタイプミスだと思っていたのですが、実際にコンパイルされているのを見て、とても戸惑いました。誰かが私が見つけてくれるのを手伝ってもらえますか?goto
ラベルではないと思います。
void f() {
class: sample {
// there were some members declared here
} x;
}
これは名前のないクラスであり、コロンは からプライベートに継承することを意味しsample
ます。みたいに見る
class Foo : private sample
{
// ...
};
Foo x;
から派生した名前のないクラスを定義していると思います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
名前のないクラスです。
たとえば、C++11 より前のローカル関数の代わりに使用できます。
int main() {
struct {
int operator() (int i) const {
return 42;
}
} nice;
nice(0xbeef);
}
後に続くコロンは、 デフォルトの継承を使用して派生することをsample
意味します。(構造体の場合: public、クラスの場合: private)sample