考虑以下代码
int add(int a, int b)
{
return a + b;
}
int main()
{
std::cout << (*add)(3, 2);
}
解引用函数指针的意义是什么?
我无法想出这样使用的情况,它似乎没有优势...
C++中为什么存在这种函数调用语法?
考虑以下代码
int add(int a, int b)
{
return a + b;
}
int main()
{
std::cout << (*add)(3, 2);
}
解引用函数指针的意义是什么?
我无法想出这样使用的情况,它似乎没有优势...
C++中为什么存在这种函数调用语法?
这种语法的存在是因为C语言有它,而C++语法最初是基于C语言的。
f(args)
和(*f)(args)
在代码行为上没有区别。
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
再次强调,这是我能想到的最合理的解释。我不确定它是否是正确/最佳/完全的解释,但我希望它能给你带来函数方面的新视角。
(**add)(3,2)
也是有效的,(***********add)(3,2)
同样有效,它们在功能上是等效的。 - Zinki