类引用作为函数返回值的问题

记录自己尝试C++的一点心得

我的第一个尝试其实是如下,

class Object{
public:
 static int r(){
    int i=1;
    return i;
  }
};

int main(int argc, char const *argv[]) {
  int& i=Object::r();
   return 0;
}

报错信息

main.cpp:40:19: error: invalid initialization of non-const reference of type ‘int&’ from an rvalue of type ‘int

在编译的时候就出现问题。引用是变量的别名,而但是函数的返回值是临时变量,所以需要常引用,const int&才行

这里有篇文章也是临时变量问题:

http://blog.csdn.net/zq_onlytime/article/details/44654671

 

然后又试了下如下

class Object{
public:
    static Object&  new_instance(){
    //只能使用非引用的方式将局部对象变量传出去
    Object o;
    return o;
  }
  static int & f(){
    //这里也有上述问题
    int i=1;
    return i;
  }
}
int main(int argc, char const *argv[]) {
  const int& i=Object::f();
   const Object & o=Object::new_instance();
  printf("%d\n",i );
  printf("%d\n",o.i);
}

编译时警告

main.cpp: In static member function ‘static Object& Object::new_instance()’:
main.cpp:17:12: warning: reference to local variable ‘o’ returned [-Wreturn-local-addr]
     Object o;
            ^
main.cpp: In static member function ‘static int& Object::f()’:
main.cpp:22:9: warning: reference to local variable ‘i’ returned [-Wreturn-local-addr]
     int i=1;

运行是会出现段错误,函数内的局部变量是不能作为引用的返回值的。

 

有一篇以讲解引用作为返回值的文章:

http://blog.csdn.net/lanyang123456/article/details/40866207

这篇文章里的不能动态分配内存作为返回值还是太狭隘了,根本是把函数内的局部变量作为引用返回值就会发生段错误啊。

posted @ 2017-11-04 14:47  _离水的鱼  阅读(1638)  评论(0编辑  收藏  举报