私はこれまで見たことがありません。私はそれが ":: sample"のtypoだと思っていましたが、実際にコンパイルしたのを見たとき、私は非常に混乱しました。誰かが私を見つけて助けてくれますか?私はそれがgoto
ラベルだとは思わない。"class:"はC++で何を意味しますか?
void f() {
class: sample {
// there were some members declared here
} x;
}
私はこれまで見たことがありません。私はそれが ":: sample"のtypoだと思っていましたが、実際にコンパイルしたのを見たとき、私は非常に混乱しました。誰かが私を見つけて助けてくれますか?私はそれがgoto
ラベルだとは思わない。"class:"はC++で何を意味しますか?
void f() {
class: sample {
// there were some members declared here
} x;
}
無名のクラスであり、コロンはsample
から個人的に継承することを意味します。
class Foo : private sample
{
// ...
};
Foo x;
うわー、面白いです。あなたが正しいと思われます。スコープにクラス "sample"があり、クラスメンバーはベースクラスにアクセスします。わかりました。 –
@Johannes:名前のないクラスはデフォルトのコンストラクタやデストラクタを持つことができず、(ローカルクラスであるため)テンプレートとしても使用できないため、これはかなり限定されたアプローチです。私はこの構成の使用が何であるか興味があります。私がローカルクラスで知っている唯一のユースケースは、 "型消去イディオム"です(つまり、 'sample *'を返すが、 'sample'はここではアクセスできない基本クラスです)。 –
@Alexandreそれは実際のコードでは起こりませんでした。それは私の遊び場ファイルの一つでした。 –
ようにそれを参照してください。私はそれが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:私は、アクセシビリティの理由struct
にclass
を変更!
これは名前のないクラスです。
プレC++ 11にローカル機能を置換する:
int main() {
struct {
int operator() (int i) const {
return 42;
}
} nice;
nice(0xbeef);
}
sample
続くコロンは単にデフォルトの継承を用いsample
由来することを意味します。
(サンプルから継承する)インスタンスxのように見えます。以前はこれを見たことがありません。多分それはC++ 0xですか? – ssmir
ちょうど推測:これは 'sample'から派生した無名クラスですか? – davka
「goto」ラベルではありませんか?正解、 'goto'は' class'のトップです! –