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

Posted 离水的鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类引用作为函数返回值的问题相关的知识,希望对你有一定的参考价值。

记录自己尝试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

在编译的时候就出现问题。引用是变量的别名,而函数返回值在main里是不能改变的,所以需要常引用,const int&才形

然后又试了下如下

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;

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

 

以上是关于类引用作为函数返回值的问题的主要内容,如果未能解决你的问题,请参考以下文章

引用作为函数返回值的一点思考

java ----一个函数传回多个值的总结

C++ 把引用作为函数返回值

返回引用

从使用 wkwebview 返回值的 javascript 调用 swift 函数

在c语言中子函数引用主函数中的值和引用主函数某个值的地址的区别