Что означает «класс:» в C ++? - PullRequest
78 голосов
/ 17 января 2011

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

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

Ответы [ 3 ]

80 голосов
/ 17 января 2011

Это безымянный класс, и двоеточие означает, что он наследуется в частном порядке от sample.Смотри как

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

Foo x;
21 голосов
/ 17 января 2011

Я думаю, что это определяет безымянный класс , происходящий от samplex является переменной этого безымянного класса.

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 по причине доступности!

1 голос
/ 06 декабря 2011

Это безымянный класс.

Вы можете использовать их, например, заменить локальные функции в пре-C ++ 11:

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

    nice(0xbeef);
}

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

...