为啥返回局部变量的引用不报错

为什么返回局部变量的引用不报错,
/* 
 * 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...