在C++中“class:“是什么意思?

dwthyt8l  于 2023-01-22  发布在  其他
关注(0)|答案(3)|浏览(191)

我以前从来没有见过它。我以为它是“::sample”的拼写错误,但是当我看到它实际上编译时,我非常困惑。有人能帮我找出答案吗?我不认为它是一个goto标签。

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

9udxz4iz1#

它是一个未命名的类,冒号表示它从sample私有继承。

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

Foo x;
igetnqfo

igetnqfo2#

我认为这是定义了一个未命名的类,从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是为了方便访问!

lbsnaicq

lbsnaicq3#

那是一个未命名的类。
例如,你可以用它们来代替C++11之前的本地函数:

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

    nice(0xbeef);
}

冒号后面跟sample表示 * 使用默认继承从sample派生 *。(对于结构体:公共,对于类:私人)

相关问题