繁体   English   中英

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

[英]Function call syntax through a pointer dereference

考虑一下代码

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

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

取消引用函数指针有什么意义?

我想不出这样的用例,它会带来优势......

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

我无法确定我是否正确,但这里有一个可能的解释:c和c ++中的每个函数都是一个潜在的变量。 可能的功能声明是:

int (*MyFunction)(int, double);

在这种情况下 - 变量名称: MyFunction | 类型:使用int, double参数返回int函数。

因此,即使在声明函数时,实际上也是使用“函数”类型声明变量。 在这种情况下,为什么你可以在你的情况下(*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

同样,这是我能想到的最有意义的解释。 我不确定它是否是正确/最好/完全解释,但我希望它给你一个新的功能视角。

存在这种语法是因为C有它,而C ++语法最初是基于C.

f(args)(*f)(args)的代码行为没有区别。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM