代码改变世界

函数返回const引用形参的指针问题

2012-11-28 22:55  kennyMc  阅读(1073)  评论(1)    收藏  举报
int fun(const int &value){return value;}//ok
int * fun1(const int &value){return &value;}//error C2440: “return”: 无法从“const int *”转换为“int *”
const int * fun1(const int &value){return &value;}/ok

无意中看书发现的问题,才看c++没多久,一直不清楚为什么第二个函数必须加一个const,想了很久想通了。

#include <iostream>
#include <vector>
#include <string>
using std::cout;
using std::endl;
using std::vector;
using std::string;

int fun(const int &value){return value;}
const int * fun1(const int &value){return &value;}

int main()
{
    int value=1;
    int i=fun(value);
    const int *p=fun1(value);
    system("PAUSE");
    return 0;
}


fun函数value是引用形参,函数返回类型是一个Int,return value返回的是value值的副本,这里函数返回类型不是引用。

fun1函数形参也是引用,但是函数返回类型是指针,这里返回的是引用形参value的指针,函数形参虽然是const,但是我们可以给形参传递const实参或者非const实参,但是函数内部会认为局部形参是一个const类型,所以这里return &value是返回一个const int*的指针,指针指向的内部不可变,所以这里如果函数返回类型不加const,那么就和实际返回的值类型不符。

本文版权归kennyMc和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。