函数签名中的'class'关键字 - 它是标准的C ++吗?

时间:2014-04-01 10:30:43

标签: c++ syntax parameters

我正在研究给我的代码,我看到了:

AFPSGameMode::AFPSGameMode(const class FPostConstructInitializeProperties& PCIP)
    : Super(PCIP) {   }

我特别好奇使用class关键字。这是标准的C ++,如果是这样,它意味着什么?

谢谢。

2 个答案:

答案 0 :(得分:5)

这里允许使用class关键字,因为它可以完全省略(如果此类先前已声明)或替换为前向声明

void foo(const class FPostConstructInitializeProperties& p){ ... }

相当于:

class FPostConstructInitializeProperties; // <-- forward declaration
void foo(const FPostConstructInitializeProperties& p){ ... }

不要对奇怪的命名约定感到困惑。您提供的代码段表达了以下内容:

class B{
public:
    B(){ }
    B(const B& b){ };
};

class A{
public:
    B my_b;
    A(const class B& b) : my_b(b) { }  // <-- class keyword in ctor's param decl.
};

可以像这样使用(但我想它已经足够清楚了):

int main() {
    B b;
    A a(b);
}

答案 1 :(得分:1)

因为它是老C,如果你有结构说,

struct account
{
int field;
..
};

您可以使用它来创建变量(对象),例如

account obj;

或,

struct account obj;

同样适用于class,您可以使用它,或者避免使用它。但通常不使用,但允许使用。