首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于pow函数疑问,该怎么处理

2012-04-21 
关于pow函数疑问在VC2008里面我已知pow的参数类型是double于是我给了pow两个参数:C/C++ codepow(2.0, 4.0)

关于pow函数疑问
在VC2008里面我已知pow的参数类型是double于是我给了pow两个参数:

C/C++ code
pow(2.0, 4.0);  //编译通过
上面的就能编译通过,于是我改了一下:
C/C++ code
pow(2, 4);  //编译失败
只是少了两个“.0”编译就失败了,是double类型不能直接写整数,要写要要强制加“.0”?
后来又试了一下:
C/C++ code
pow(2.0, 4);  //编译成功
或:
C/C++ code
pow(2, 4.0);  //编译成功
只要给任意一个参数加上“.0”就都能编译通过,这又是为什么捏?

[解决办法]
重载不明确。
[解决办法]
cmath中有这么几种pow:
C/C++ code
inline float __CRTDECL pow(_In_ float _X, _In_ float _Y){return (powf(_X, _Y)); }inline float __CRTDECL pow(_In_ float _X, _In_ int _Y){return (_Pow_int(_X, _Y)); }inline long double __CRTDECL pow(_In_ long double _X, _In_ long double _Y){return (powl(_X, _Y)); }inline long double __CRTDECL pow(_In_ long double _X, _In_ int _Y){return (_Pow_int(_X, _Y)); }inline double __CRTDECL pow(_In_ double _X, _In_ int _Y){return (_Pow_int(_X, _Y)); }
[解决办法]
去看看pow的类型,double float等,int貌似不支持,得类型转换
[解决办法]
pow(2.0f, 4.0f); //调用是pow(float, float)
pow(2.0, 4.0); //调用pow(double, double)

pow(2, 4.0); // pow(double, double)
pow(2.0, 4); // pow(double, int)

[解决办法]
int是会隐形转换成double型,看看你是不是有重载方面,或者其他方面出问题了。
[解决办法]
类型的问题 重载类型不明确 你需要指定调用那个重载类型
[解决办法]
首先,编译器是按照如下方式确定调用哪个重载函数的:
1.是确定该调用中所考虑的重载函数的集合,该函数集合被称为候选函数(candidant function)。所谓候选函数就是与被调用函数同名的函数。
2.选出的候选函数中调出可行函数(viable function)。可行函数的函数参数个数与调用的函数参数个数相同,或者可行函数的参数可以多一些,但是多出来的函数参数都要有相关的缺省值
3.是根据参数类型的转换规则将被调用的函数实参转换(conversion)成候选函数的实参。这里本着充分利用参数类型转换的原则,换句话说,尽可能的使用上参数类型转换。当然转换要以候选函数为转换的目标。如果依照参数转换规则没有找到可行函数,则该调用就是错误的,则说没有函数与调用匹配,属于无匹配情况(no match function)。
4.从选出的可行函数中选出最佳可行函数(best match situation)。在最佳可行函数的选择中,从函数实参类型到相应可行函数参数所用的转化都要划分等级,根据等级的划分(ranked),最后选出最佳可行函数。此时,如果有多个最佳可行函数,将编译错误~

热点排行