可以取消引用函数指针吗
摘自 E Balagurusamy 的 C++ 面向对象编程
使用函数指针,我们可以让 C++ 程序在运行时动态选择一个函数。我们也可以将一个函数作为参数传递给另一个函数。在这里,函数作为指针传递。不能取消引用函数指针。C++ 还允许我们比较两个函数指针。
这里写到函数指针不能被取消引用。但是下面的程序运行成功。
#include<iostream>
int Multiply(int i, int j) {
return i*j;
}
int main() {
int (*p)(int , int);
p = &Multiply;
int c = p(4,5);
int d = (*p)(4,11);
std::cout<<c<<" "<<d;
return 0;
}
在最后一行的第 4 行,我引用了指针。这是正确的吗?它没有给出任何编译器时间错误,最后第四行写的内容与最后第五行写的内容相同吗?我已经开始学习 C++,所以请不要介意我问了一些非常愚蠢的问题。
回答
你的编译器是对的,书是错的。
但p(4,5)和(*p)(4,5)做同样的事情,所以它几乎从来没有必要取消引用函数指针。
[expr.unary.op]/1一元运算
*符执行间接操作:应用它的表达式应该是指向对象类型的指针,或指向函数类型的指针......
(粗体我的)
请不要介意我是否问了一些非常愚蠢的问题
不,在验证您阅读的内容方面做得很好。