考虑代码
int add(int a, int b)
{
return a + b;
}
int main()
{
std::cout << (*add)(3, 2);
}
取消引用函数指针???
的重点是什么我无法想到这样一个可以带来优势的用例......
为什么这个函数调用语法存在于C ++中?
答案 0 :(得分:0)
我无法确定我是否正确,但这是一个可能的解释: c和c ++中的每个函数都是一个潜在的变量。 可能的功能声明是:
int (*MyFunction)(int, double);
在这种情况下 - 变量名称:MyFunction
|键入:返回带有int
参数的int, double
的函数。
所以,即使你声明了函数,你实际上用一个&#34;函数来声明变量&#34;类型。在这种情况下,为什么你可以使用(*add)(3, 2)
进行函数调用(或使用变量),这是有道理的。
您可以更清楚地了解lambda表达式,它可以实现函数实现,然后让您像本地函数变量一样使用它:
int(*MyFunction)(int, double) = [](int a, double b) -> int {
return (int)((a + b) * 10);
};
这里我们声明函数类型变量,并使用lambda表达式为它实现一个函数。现在我们可以用两种形式使用它:
MyFunction(1, 2.5); // Like a regular function
(*MyFunction)(1, 2.5); // As a function type variable
同样,这是我能想到的最有意义的解释。我不确定这是否是正确/最佳/完整的解释,但我希望它能为您提供新的功能视角。
答案 1 :(得分:0)
这种语法的存在是因为C有它,而C ++语法最初是基于C.
f(args)
和(*f)(args)
的代码行为没有区别。