zoukankan      html  css  js  c++  java
  • 类引用作为函数返回值的问题

    记录自己尝试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可怕
  • 相关阅读:
    CSS中expression使用简介
    过滤Html标签代码
    ASP.NET上传图片时显示预览
    30分钟搞定.net正则表达式
    DataFormatString格式化
    Js事件大全
    Hibernate关联映射
    动态给下拉框添加选项
    python模块整理文章导航
    python学习笔记文章导航
  • 原文地址:https://www.cnblogs.com/Jacket-K/p/7783362.html
Copyright © 2011-2022 走看看