C++函数指针解引用

声明函数的引用:

 
  1. int f( double );  
  2. int (* const pf)(double) = f;       // pf是指向函数f()的常量指针  
  3. int (&rf)(double) = f;               // rf是函数f()的引用 

从编码实践角度来看,指向函数的常量指针和函数的引用并无很大不同。除了一点,那就是指针可以显式地使用反引用语法,而对引用是不能使用显式反引用语法的,除非它被隐式转换成指向函数的指针 。

  1. a = pf( 12.3 );                      // 直接用函数指针名调用函数  
  2. a = (*pf)(12.3);                    // 使用反引用语法也是可以的  
  3. a = rf( 12.3 );                      // 通过引用调用函数  
  4. a = f( 12.3 );                       // 直接调用函数本身  
  5. a = (*rf)(12.3);         // 把引用(隐式)转换成指向函数的指针,再使用反引用语法  
  6. a = (*f)(12.3);          // 把函数本身(隐式)转换成指向函数的指针,再使用反引用语法 

(注:此处六行代码主要想说明,C++的函数调用很灵活,无论是通过使用函数名本身、指向函数的指针还是函数的引用来调用函数,都既可以用名字本身,也可以使用反引用语法。尽管后两行在语法上其实是经过了一个隐式类型转换,因而会带来效率上的损失。)

这是《C++语言99个常见编程错误》错误5中的一段话。

 

说反引用可能有点莫名奇妙,其实它就是解引用,只是翻译过来不同罢了。

 

上面声明函数指针时,

int(* const pf)(double)易可为int(* const pf)(double) = &f; 此处的原因为:将一个函数的地址初始化或赋值给一个指向函数的指针时,无需显式地取得函数地址,编译器知道隐式地获得函数的地址,即在此种情况下,&操作符是可选的,通常省略不用。

 

然后对于引用的解引用,由编译器隐式转换成指向函数的指针,否则编译不通过。

当然要是真想编无聊的代码,后两句可以类似写成这样 a = (*****************rf)(12.3);    其中意思参考上面你应该懂的。 

原文:https://blog.csdn.net/shiliangsl0115/article/details/6152188

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值