C++函数重载

本文探讨了C++中的函数重载概念,强调重载与函数返回类型无关,关键在于参数列表的不同。同时,通过示例说明了由于隐式类型转换可能导致的二义性问题,并指出编译器通过name mangling解决重载函数的实际命名冲突。
摘要由CSDN通过智能技术生成

函数重载就是函数名相同,参数列表不同。(与函数返回值类型无关)

//以下前三个函数构成重载,因为函数名相同,参数列表不同
void func(int, double);
void func(char);
void func(int, int);

int func(char);//错误,返回值类型不能构成函数重载

另外,函数重载有可能会出现二义性问题

#include <iostream>

void func(long a);
void func(double a);

int main(void) {
  func(10);//二义性,不知道调用哪个

  return 0;
}

void func(long a) {
  std::cout << "func(int): " << a << std::endl;
}

void func(double a) {
  std::cout << "func(double): " << a << std::endl;
}

原因是:10这种文字量一般在c++中使用int存储,所以它既可以隐式转换为double也可以隐式转换为long,出现了二义性。

函数重载的真相就是namemangling技术的使用。实际上,编译器在处理重载函数之后,函数名变得不一样了。(比如:上面的函数可能变成了:func0,func1,func2 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值