記錄自己嘗試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
這篇文章里的不能動態分配內存作為返回值還是太狹隘了,根本是把函數內的局部變量作為引用返回值就會發生段錯誤啊。
