📜  C++中的函数重载和浮动

📅  最后修改于: 2021-05-26 00:25:58             🧑  作者: Mango

尽管多态性在C++中是一种广泛使用的现象,但有时可能会非常复杂。例如,考虑以下代码片段:

#include
using namespace std;
void test(float s,float t)
{
    cout << "Function with float called ";
}
void test(int s, int t)
{
    cout << "Function with int called ";
}
int main()
{
    test(3.5, 5.6);
    return 0;
}

似乎在main()中对函数test的调用将导致输出“调用了float的函数”,但是代码给出了以下错误:

In function 'int main()':
13:13: error: call of overloaded 'test(double, double)' is ambiguous
 test(3.5,5.6);

函数重载是众所周知的事实,编译器决定在重载函数需要调用哪个函数。如果编译器无法在两个或多个重载函数中选择一个函数,则情况为-“函数重载中的歧义”。

  • 上面代码中含糊不清的原因在于,浮动字面量3.55.6实际上被编译器视为double。根据C++标准,除非后缀明确指定,否则将浮点字面量(编译时间常数)视为double值(请参见C+++标准的2.14.4) 。由于编译器无法找到带有double参数的函数,因此如果将值从double转换为int或float会感到困惑。

纠正错误:通过提供后缀f ,我们可以简单地告诉编译器字面量是浮点型的,而不是双精度型。

看下面的代码:

#include
using namespace std;
void test(float s,float t)
{
    cout << "Function with float called ";
}
void test(int s,int t)
{
    cout << "Function with int called ";
}
int main()
{
    test(3.5f, 5.6f); // Added suffix "f" to both values to 
                     // tell compiler, it's a float value
    return 0;
}

输出:

Function with float called
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”