函数返回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和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
浙公网安备 33010602011771号