c++ - 函数参数前的类关键字是什么?

标签 c++ c++11

为什么这段代码有效?看到 f 函数参数前面的 class 关键字了吗?如果我添加它会发生什么变化?

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;
}

最佳答案

如果作用域中存在名称与类类型名称相同的函数或变量,则可以将类添加到名称前面以消除歧义,从而产生 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
}

关于c++ - 函数参数前的类关键字是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46139526/

相关文章:

c# - 使用 CLI 或任何其他方式将 C++ 库静态链接到 C# 进程

c++ - '0'、 '\0' 和 0 与 sizeof() 和 strlen() 有什么区别?

c++ - 将 SDL2 与 g++/MinGW 一起使用会在启动时崩溃

c++ - 涉及通用引用的过载解决方案

c++ - gnu++0x 标准的 GNU 版本问题

c++ - 为不同的库包含相同的头文件

c++ - 函数: 'find' 未为 std::vector 定义

c++ - 布冯的针 C++

c++ - 模板函数中的静态变量似乎不是模板实例所独有的

c++ - make_unique 和完美的转发