函数参数之前的class关键字是什么?

时间:2016-03-12 15:17:13

标签: c++ c++11

为什么这段代码有效?请参阅f函数参数前面的struct A { int i; }; void f(class A pA) // why 'class' here? { cout << pA.i << endl; } int main() { A obj{7}; f(obj); return 0; } 关键字?如果我添加它会有什么变化?

Person

1 个答案:

答案 0 :(得分:16)

如果范围中存在一个函数或变量,其名称与类类型的名称相同,则可以在类之前添加类以消除歧义,从而产生elaborated type specifier

您始终可以使用精心设计的类型说明符。然而,它的主要用例是当你有一个具有相同名称的函数或变量时。

来自cppreference.com的示例:

class T {
public:
    class U;
private:
    int U;
};

int main()
{
    int T;
    T t; // error: the local variable T is found
    class T t; // OK: finds ::T, the local variable T is ignored
    T::U* u; // error: lookup of T::U finds the private data member
    class T::U* u; // OK: the data member is ignored
}