使用类构造函数声明一个函数作为函数参数

时间:2014-10-20 21:29:59

标签: c++

struct A{
   A(){}
};

struct B{
    B(const A& a){}
};

int main()
{
 //Originally I would like to write down below code

A a;  
B b(a); 

//Unfortunately I end up with below code by accident and there is no compile error
//I have figured out the below does not create temporary A and call B constructor to 
//create B as the above codes,
//it declares a function with return value B, name b, 
//and some input parameter, my question is  1) what the input parameter is ? 
//2) How to implement such a function.

B b(A());   // There is no global function A() in my test case.

}

问题在评论中,我希望有些人可以帮助我理解它。非常感谢你。

2 个答案:

答案 0 :(得分:3)

它声明了一个名为b的函数,它返回B,它有一个类型为A (*)()的参数,即指向函数的指针不带参数并返回A 。声明符A()表示"函数不带参数并返回A"但是无论何时声明参数具有函数类型,它都会被重写为指向功能。此声明中的参数未命名(如果您不想,则不必为参数指定名称)。

实现这样的功能,您需要一个定义例如

B b(A a()) {
    // do something with "a"
    // note: the type of "a" is still pointer to function
}

请参阅,例如Is there any use for local function declarations?

答案 1 :(得分:2)

B b(A())声明一个名为b的函数,它返回一个B并将一个函数指针作为参数。函数指针指向一个返回A并且不带参数的函数。