注册 登录
编程论坛 C++教室

c++ 中,局部对象a不是从栈中撤出了吗,为什么它的别名还可以正常操作??;

yoyfm 发布于 2019-06-19 10:49, 1119 次点击
#include<iostream>
using namespace std;
class A
{
public:
    A(int i) { x = i; cout << "构造" << endl;    }
    int get() { return x; }
    void set(int i) { x = i; }
    ~A() { x = NULL; cout << "析构" << endl; }
private:
    int x;
};
A &func();
int main()
{
    A &r = func();
    cout << r.get() << endl;//别名r获取的是局部对象a
    r.set(6);
    cout << r.get() << endl;//问题:局部对象a不是从栈中撤出了吗,为什么它的别名还可以正常操作??;
    return 0;
}
A &func()
{
    A a(223);
    return a;
}

只有本站会员才能查看附件,请 登录

1 回复
#2
rjsp2019-06-19 11:18
首先,你编译时看到 warning C4172: returning address of local variable or temporary 这行警告了吗?
其次,C++只保证正确的代码有正确的结果,不保证“错误的代码有正确的结果”,也不保证“错误的代码有错误的结果”

假如编译器有人格的话,
编译器:你的代码有未定义行为吆!
你:为什么代码输出错误了呢?
编译器:我早就说过你的代码有未定义行为
你:为什么代码输出正确呢?
编译器:我早就说过你的代码有未定义行为
1