類引用作為函數返回值的問題


記錄自己嘗試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

這篇文章里的不能動態分配內存作為返回值還是太狹隘了,根本是把函數內的局部變量作為引用返回值就會發生段錯誤啊。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM