Ответ 1
Это неназванный класс, а двоеточие означает, что он наследует конфиденциально от sample
. Смотрите, как
class Foo : private sample
{
// ...
};
Foo x;
Я никогда раньше этого не видел. Я думал, что это опечатка для ":: 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
по причине доступности!
Это неназванный класс.
Вы можете использовать их, например. для замены локальных функций в pre-С++ 11:
int main() {
struct {
int operator() (int i) const {
return 42;
}
} nice;
nice(0xbeef);
}
Двоеточие, за которым следует sample
, просто означает вывод из sample
с использованием наследования по умолчанию. (для structs: public, для классов: private)