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可怕
  • 相关阅读:
    xcode swift对应版本
    VM12安装OS X10.11步骤及说明
    Java开发Webservice的组件
    xml文件格式说明
    android开发中在界面上实现曲线图的几个开源项目
    C#中SQL Server数据库连接池使用及连接字符串部分关键字使用说明
    c#对数据库访问完应关闭连接
    I2C VHDL程序
    数码管一些列功能的verilog实现
    PWM控制灯亮暗的verilog实现
  • 原文地址:https://www.cnblogs.com/Jacket-K/p/7783362.html
Copyright © 2011-2022 走看看