为啥返回局部变量的引用不报错
为什么返回局部变量的引用不报错,
/*
* File: main.cpp
* Author: chujiangke
*
* Created on 2013年4月1日, 下午11:04
*/
#include <cstdlib>
#include <iostream>
using namespace std;
/*
*
*/
class point
{
int a;
int b;
//point(point&);
public:
point(int b=0,int a=0){this->a=a;this->b=b;}
int get_a(){return a;}
int get_b(){return b;}
};
point& funciton1(point &a)
{
point b; // 这不是局部变量吗,还有有没用给b分陪空间
// java里面point b这样写好像只是定义一个point b
// 要通过point b= new class point;分配具体的空间
//大家这么看 好困惑。
b=a; //默认的拷贝构造函数
return b;
}
int main(int argc, char** argv) {
point a(11,12);
point b=funciton1(a);
cout<<b.get_a();
return 0;
}
------解决方案--------------------
point& funciton1(point &a)
{
point b; // 这不是局部变量吗,还有有没用给b分陪空间
// java里面point b这样写好像只是定义一个point b
// 要通过point b= new class point;分配具体的空间
//大家这么看 好困惑。
b=a; //默认的拷贝构造函数
return b;
}
不会报错,会有警告,会告诉你使用一个无效对象,这个而对象b在该方法调用后,生命周期结束,你将返回一个无效的对象值。
------解决方案--------------------
纠正一下:
b = a; 调用的不是拷贝构造函数,而是拷贝赋值操作符。
return b; 会调用缺省的拷贝构造函数。
一般而言缺省的拷贝构造函数都是浅拷贝。
没报错是运气问题,严格一点的编译器至少会给出警告。
------解决方案--------------------
刚编译了下,有警告信息的,只是不注意发现不了
Compiling...
/*
* File: main.cpp
* Author: chujiangke
*
* Created on 2013年4月1日, 下午11:04
*/
#include <cstdlib>
#include <iostream>
using namespace std;
/*
*
*/
class point
{
int a;
int b;
//point(point&);
public:
point(int b=0,int a=0){this->a=a;this->b=b;}
int get_a(){return a;}
int get_b(){return b;}
};
point& funciton1(point &a)
{
point b; // 这不是局部变量吗,还有有没用给b分陪空间
// java里面point b这样写好像只是定义一个point b
// 要通过point b= new class point;分配具体的空间
//大家这么看 好困惑。
b=a; //默认的拷贝构造函数
return b;
}
int main(int argc, char** argv) {
point a(11,12);
point b=funciton1(a);
cout<<b.get_a();
return 0;
}
------解决方案--------------------
point& funciton1(point &a)
{
point b; // 这不是局部变量吗,还有有没用给b分陪空间
// java里面point b这样写好像只是定义一个point b
// 要通过point b= new class point;分配具体的空间
//大家这么看 好困惑。
b=a; //默认的拷贝构造函数
return b;
}
不会报错,会有警告,会告诉你使用一个无效对象,这个而对象b在该方法调用后,生命周期结束,你将返回一个无效的对象值。
------解决方案--------------------
纠正一下:
b = a; 调用的不是拷贝构造函数,而是拷贝赋值操作符。
return b; 会调用缺省的拷贝构造函数。
一般而言缺省的拷贝构造函数都是浅拷贝。
没报错是运气问题,严格一点的编译器至少会给出警告。
------解决方案--------------------
刚编译了下,有警告信息的,只是不注意发现不了
Compiling...