![](/img/trans.png)
[英]Calling a function through a function pointer - dereference the pointer or not? What's the difference?
[英]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.