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