Das ist mein Code
#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);
}
Was mich verwirrt hat ist, dass A()
in void func(A())
gleich A (*)()
anstelle von A
's Konstruktor ist. Wie funktioniert das?
A()
warA
‚s Konstruktor?Antworten:
Lassen Sie uns analog argumentieren. Wenn Sie eine Funktion definieren
dann behandelt C ++ es so, als hätten Sie tatsächlich geschrieben
Mit anderen Worten, es gibt einige Typen, bei denen C ++ sie automatisch durch einen anderen Typ ersetzt, wenn Sie sie als Parameter für eine Funktion verwenden, den Typ, den Sie durch Abklingen des Typs erhalten würden.
In Ihrem Fall,
A()
ist dies der Typ einer Funktion, die keine Argumente akzeptiert und eine zurückgibtA
. Wenn Sie eine C ++ - Funktion haben, die einA()
als Argument verwendet, wird in C ++ stattdessen die Funktion als Eingabe verwendetA (*)()
, ein Zeiger auf eine Funktion, die keine Argumente akzeptiert und ein zurückgibtA
. Der Grund dafür ist, dass SieA()
in C ++ kein Objekt vom Typ haben können, obwohl Sie einen Zeiger auf ein Objekt haben könnenA()
.quelle