了解void func(A())

mei*_*hen 8 c++

这是我的代码

#include <iostream>

class A {
public:
    int a = 0;
    A(int i = 0) : a(i) {}
};

void func(A())
{
    std::cout << "Hello" << std::endl;
}

int main()
{
    A(*p)() = NULL;
    func(p);
}
Run Code Online (Sandbox Code Playgroud)

让我感到困惑的是,A()in void func(A())等于A (*)()而不是A的构造函数。这是如何运作的?

tem*_*def 9

让我们以类推为理由。如果定义函数

void doSomething(A [137]) {

}
Run Code Online (Sandbox Code Playgroud)

然后C ++会将其视为您实际上已编写

void doSomething(A *) {

}
Run Code Online (Sandbox Code Playgroud)

换句话说,在某些类型中,如果将它们用作函数的参数,C ++会自动将它们替换为其他类型,即通过衰减该类型来获得该类型。

就您而言,A()是不接受任何参数并返回的函数的类型A。如果您有一个将a A()作为参数的C ++函数,则C ++将使该函数将an作为输入A (*)(),即指向不带参数并返回an的函数的指针A。这样做的原因是A(),尽管可以有一个指向的指针,但在C ++中不能有类型的对象A()