在这种情况下,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 .
现在,它恰好发生了,没有后缀来形成一个短暂的常数.如果希望调用特定的重载,则需要添加强制转换.
koc*_*ica 29
3
has是常量并且隐式具有类型 int
对于short
重载函数执行,您必须使用short
var或short
constant.
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)
会打电话给短版.
或者您可以使用用户定义的文字来缩短:请参阅此处
你在做
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)