为什么传递文字3选择int重载而不是短过载?

Gau*_*rav 26 c++ overloading

在这种情况下,C++如何处理函数重载?

#include <iostream>

void func(int x)
{
   std::cout << "integer";
}

void func(short x)
{
   std::cout << "short";
}

int main(void)
{
   func(3);
}
Run Code Online (Sandbox Code Playgroud)

输出:整数

这是为什么?

Sto*_*ica 58

常量也有类型.如果没有后缀来表示,3则只是一个int常量.如果常量太大,编译器将选择更大的类型,但int默认情况下它不会小于a .

现在,它恰好发生了,没有后缀来形成一个短暂的常数.如果希望调用特定的重载,则需要添加强制转换.

  • 或者你创建一个后缀:) (9认同)

koc*_*ica 29

3 has是常量并且隐式具有类型 int

对于short重载函数执行,您必须使用shortvar或shortconstant.

short s = 3;
fun(s);
Run Code Online (Sandbox Code Playgroud)

要么

fun((short)3);
fun(static_cast<short>(3));
Run Code Online (Sandbox Code Playgroud)

long没有像long l = 42L;- 的后缀3,但你可以创建一个.


doc*_*ove 17

因为3是整数.

fun(static_cast<short>(3));
Run Code Online (Sandbox Code Playgroud)

会打电话给短版.

或者您可以使用用户定义的文字来缩短:请参阅此处


ΦXo*_*a ツ 6

你在做

fun(3);
Run Code Online (Sandbox Code Playgroud)

3是一个常量整数以便更好过载相匹配的功能是这样的一个

void fun(int x)
{
    std::cout << "integer";
}
Run Code Online (Sandbox Code Playgroud)

随意玩这些类型的litte并铸造那些:

fun(short(3));
fun(int(3));
// C++11
auto x = 3;
fun(x);
Run Code Online (Sandbox Code Playgroud)


小智 6

常量3有它自己的类型,在这种情况下它是一个int.short如果希望重载执行,则需要显式转换常量

fun((short)3);
Run Code Online (Sandbox Code Playgroud)