79

我以前从未见过它。我认为这是“::sample”的拼写错误,但是当我看到它实际编译时我很困惑。任何人都可以帮我找出来吗?我不认为这是一个goto标签。

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

3 回答 3

82

它是一个未命名的类,冒号表示它私有地继承自sample. 看看就好

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

Foo x;
于 2011-01-17T11:55:24.093 回答
21

我认为这是定义一个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:我改成classstruct访问性的原因!

于 2011-01-17T11:59:38.670 回答
2

那是一个无名的班级。

您可以使用它们来代替 pre-C++11 中的本地函数:

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

    nice(0xbeef);
}

后跟的冒号 sample只是表示sample使用默认继承派生而来。(对于结构:公共,对于类:私有)

于 2011-12-06T11:20:32.680 回答