让我们看看以下函数重载声明
void funA(int);
void funA(float);
Run Code Online (Sandbox Code Playgroud)
然后我们调用这样的函数:
funA(1); // this will be ok.
Run Code Online (Sandbox Code Playgroud)
然而,
funA(1.333) // this will not ok..
Run Code Online (Sandbox Code Playgroud)
对于编译器,funA(int)和funA(float)将是不明确的..编译器将1.333值转换为整数(1)..虽然假设它是一个浮点值会更合适..
我正在使用g ++(GCC)4.8.2为什么编译器不会调用funA(float)呢?但是以下工作..
funA(static_cast<float>(1.333))
Run Code Online (Sandbox Code Playgroud)
文字1.333是一个double,而不是一个float.从转换double到int被认为是为一样好double到float,因此导致不明确的过载错误.要消除歧义,请传递一个浮点数:
funA(1.333f);
Run Code Online (Sandbox Code Playgroud)
如果你想确保用double参数调用调用funA(float),那么你可以从评论中关注@JamesKanze的例子:
void funA( double v )
{
return funA( static_cast<float>( v ) );
}
Run Code Online (Sandbox Code Playgroud)
但请注意,a的范围double可能大于a的范围float.
| 归档时间: |
|
| 查看次数: |
85 次 |
| 最近记录: |