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

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*,避免出现不能返回局部变量的地址或引用,所以这里用静态局部变量。再看不同情况下是否可以接收:

 

猜你喜欢

转载自blog.csdn.net/IT_Quanwudi/article/details/84573468