这是我的代码
#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的构造函数。这是如何运作的?
让我们以类推为理由。如果定义函数
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()。
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |