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