C++遗漏知识: 重载函数的值与类型

用C++很久了, 但还是有遗漏的知识点, 观察如下代码:

void func(){}
void func(int){}
auto funcHandle = &func

这段代码无法编译通过,提示编译器不能推断出&func的类型, 原因就是func函数有重载, 不论是

void func(){}

还是

void func(int){}

获取函数地址时都是用的表达式&func
之前我的认识是, 无论什么字面量,只要写出来,就能确定其类型, 如:1是int, 1u是unsigned int

void test(int){ std::cout<<"int"<<std::endl; }
void test(unsigned int){ std::cout<<"unsigned int"<<std::endl; }
test(1);
test(1u);

两次调用分别是不同的重载函数.
但重载函数变量并非如此,
对于重载函数, 即使是字面量表达式语句也会编译不过

1;		// 可以编译通过
&func; // 编译失败: statement cannot resolve address of overloaded function

所以对于重载函数变量的赋值,只能是如下两种写法

void (*funcHandle)() = &func;
auto funcHandle1 = (void (*)(int)) &func
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值