记录自己尝试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
这篇文章里的不能动态分配内存作为返回值还是太狭隘了,根本是把函数内的局部变量作为引用返回值就会发生段错误啊。