How does C++ handle function overloading in this case?
#include <iostream>
void func(int x)
{
std::cout << "integer";
}
void func(short x)
{
std::cout << "short";
}
int main(void)
{
func(3);
}
Output: integer
Why is that?
Constants have types too. And without a suffix to indicate otherwise, 3
is simply an int
constant. The compiler will choose a larger type if the constant is too big, but it won't go for things smaller than an int
by default.
Now, it just so happens, that there is no suffix to make a short constant. You'd need to add a cast if you want that particular overload to be called.
Literal 3
is a constant and implicitly is of type int
by the language design.
For your short
overloaded function execution you have to use short
variable:
short s = 3;
fun(s);
or cast the constant properly:
fun((short)3);
fun(static_cast<short>(3));
Type short
hasn't suffix like for example long
(long l = 42L;
), but you can create one.
Because 3
is an integer.
fun(static_cast<short>(3));
would call the short version.
Or you can use user-defined literals to make a short: See here
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With