Что означает "class:" в С++?

Я никогда раньше этого не видел. Я думал, что это опечатка для ":: sample", но когда я увидел, что это действительно компилирует, я был очень смущен. Может ли кто-нибудь помочь мне узнать, пожалуйста? Я не думаю, что это метка goto.

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

Ответ 1

Это неназванный класс, а двоеточие означает, что он наследует конфиденциально от sample. Смотрите, как

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

Foo x;

Ответ 2

Я думаю, что это определение неназванного класса, полученного из 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 по причине доступности!

Ответ 3

Это неназванный класс.

Вы можете использовать их, например. для замены локальных функций в pre-С++ 11:

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

    nice(0xbeef);
}

Двоеточие, за которым следует sample, просто означает вывод из sample с использованием наследования по умолчанию. (для structs: public, для классов: private)