Although polymorphism is a widely useful phenomena in C++ yet it can be quite complicated at times. For instance consider the following code snippet:
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 :
Function with float called
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above