可以取消引用函数指针吗

摘自 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

一元运算*符执行间接操作:应用它的表达式应该是指向对象类型的指针或指向函数类型的指针......

(粗体我的)


请不要介意我是否问了一些非常愚蠢的问题

不,在验证您阅读的内容方面做得很好。


以上是可以取消引用函数指针吗的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>