const与函数重载, 函数返回值之间的关系

本文探讨了const在函数重载中的作用,解释了为何const int a和int a不能构成重载。同时,文章详细分析了函数返回值为int、int*和int&时,关于返回局部变量的限制以及如何通过不同数据类型接收这些返回值的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

const与函数重载, 函数返回值之间的关系

 

const与函数重载:

之前说过函数重载,对于参数来说,const是否能构成一种新的参数类型呢?

 

例如:

Funx(int a);

Funx(const int a);这俩是否能构成重载呢?

答案是不能的。为什么不能,你可以理解为,如果const没有修饰*指针或&引用,那么其类型其实并没有变化。什么意思呢?

 

这里我们可以看一下int * const p;

它只是修饰了p,并没有修饰*号,即p自己随意怎么固定,反正int *p和int *const p最终表示的是一样的,有人会说明显不一样啊,一个p可以改,一个p不可以改。

再次强调说的是对参数,其表现就是究竟对实参的值有影响,反正最终传进来的都是指针p,管他p怎么固定呢,只要p的解引用都可以修改实参,权限是一样的,我就认为他俩一样。

 

比如下面这个就构不成重载:

Funx(int * a);

Funx(int *const a);  

最终funx函数里都可以通过解引用*a修改实参,两者没有什么不同。

 

 

但是下面这两个就可以构成重载:

Funx(int * a);

Funx(const int * a);

最终funx里,前者可以通过解引用*a修改实参,后者解引用*a是非法的,这显然是2种参数,自然可以构成重载。

 

 

 

const 与函数返回值:

先看不同类型返回值是否能返回其局部变量:

 

返回值类型为int:

 

我们再将返回值类型改为int*:

 

我们再将返回值类型改为int&:

 

我们可以得出结论:不能返回局部变量的地址或引用!

 

 

 

再看不同类型返回值可以通过什么数据类型来接收:

 

返回值类型改为int,看不同情况下是否可以接收:

 

返回值类型改为int*,避免出现不能返回局部变量的地址或引用,所以这里用静态局部变量。再看不同情况下是否可以接收:

 

返回值类型改为int*,避免出现不能返回局部变量的地址或引用,所以这里用静态局部变量。再看不同情况下是否可以接收:

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值