函数调用语法通过指针解除引用

时间:2018-05-30 19:05:02

标签: c++ function-pointers

考虑代码

int add(int a, int b)
{
    return a + b;
}    

int main()
{
    std::cout << (*add)(3, 2);
}

取消引用函数指针???

的重点是什么

我无法想到这样一个可以带来优势的用例......

为什么这个函数调用语法存在于C ++中?

2 个答案:

答案 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)的代码行为没有区别。