读书人

一个quot;指向函数的指针quot;有关问题

发布时间: 2012-03-04 11:13:34 作者: rapoo

一个"指向函数的指针"问题.
在C语言里面,同一个作用域里面是不允许有同名函数的,也就是函数不能重载.那么直接将函数名赋值给指针变量就行了.如下:
int (*p)();
p = function;

但是到了C++里面,是允许函数重载的,可以用函数的参数个数 类型来区分调用的是哪个函数.如此以来,仅仅函数名是无法正确指定函数的,这时,该怎样赋值给指针变量呢?靠什么来区分?

[解决办法]
函数指针的特点就是其不仅仅包含了指针的特性(取值)而且在编译器保留了要求匹配的函数原型格式(为了为C唯一看似动态的机制加以限制)这样不违反强类型语言的特性,同时获得了回调等不错的功能,所以说在给函数指针赋值时编译器要检查匹配原型,原型不符的一般不可以赋值(当然可以强制赋值,当时很危险)同样在C++里面编译器也会这样做,匹配所有重载中能够匹配函数指针原型的那个
[解决办法]
函数指针的并不是通用的,他也有“类型”,“类型”由参数和返回值确定。参见《c++ primer》第三版315页
[解决办法]
函数重载要求编译器能够唯一地确定调用一个函数时应执行哪个函数代码,即采用哪个函数实现。确定函数实现时,要求从函数参数的个数和类型上来区分。这就是说,进行函数重载时,要求同名函数在参数个数上不同,或者参数类型上不同。否则,将无法实现重载。
[解决办法]
真是受益匪浅,感谢Kenmark(fenix)
[解决办法]
函数指针也是具有类型的
[解决办法]
学习了!!!
[解决办法]
mark
[解决办法]
那天刚听人家说C#里面的委托类似C++的函数指针,呵呵:)
[解决办法]
LZ最好看看重载函数的解析过程
[解决办法]
(1)确定候选函数
(2)确定可行函数
(3)确定最佳匹配函数
[解决办法]
mark

读书人网 >C++

热点推荐