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


    记录自己尝试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
    ",i );
      printf("%d
    ",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

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

    少壮不识cpp,老大方知cpp可怕
  • 相关阅读:
    面向对象-类
    模块04
    总结
    昨天的新的解决方法
    感冒了~ vs中py和vb实现一个小算法
    vs2015社区版不支持installshield
    网站被黑了
    2018/11/18(python)
    2018/11/14
    2018/11/12(python)
  • 原文地址:https://www.cnblogs.com/Jacket-K/p/7783362.html
Copyright © 2020-2023  润新知