Open In App

Function Overloading and float in C++

Last Updated : 27 Mar, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

Although polymorphism is a widely useful phenomena in C++ yet it can be quite complicated at times. For instance consider the following code snippet: 

CPP




#include<iostream>
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;
}


It may appear that the call to the function test in main() will result in output “Function with float called” but the code gives following error:

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

It’s a well known fact in Function Overloading, that the compiler decides which function needs to be invoked among the overloaded functions. If the compiler can not choose a function amongst two or more overloaded functions, the situation is -” Ambiguity in Function Overloading”.

  • The reason behind the ambiguity in above code is that the floating literals 3.5 and 5.6 are actually treated as double by the compiler. As per C++ standard, floating point literals (compile time constants) are treated as double unless explicitly specified by a suffix [See 2.14.4 of C++ standard here). Since compiler could not find a function with double argument and got confused if the value should be converted from double to int or float.

Rectifying the error: We can simply tell the compiler that the literal is a float and NOT double by providing suffix f. Look at the following code : 

CPP




#include<iostream>
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;
}


Output:

Function with float called



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads