我有这堂课:
class A
{
private:
int a;
public:
int getA();
void setA(int a=2) ;
};
和一个功能:
A& func()
{
A a;
a.setA(777);
return a;
}
并在主要:
A a;
a=func();
cout<<a.getA();
我得到“777”。 但据我所知它不应该给我任何价值,因为函数中的本地“a”已被删除。那为什么我会得到正确的价值?
答案 0 :(得分:1)
因为代码的行为是 undefined ,并且至少在一次场合看似正常工作是未定义行为的可接受表现。
您可能会得到"777"
:NUL终止的const char[4]
类型。
答案 1 :(得分:0)
像Bathsheba已经回答的那样,返回对临时变量的引用会导致未定义的行为。
不幸的是,根据我的经验,有两个不好的事情在这里:
这两个问题一起使得这个问题非常危险,因为它很容易被错过并且甚至可以工作多年......直到那个非常重要的演示日。
解决方案是将此警告视为错误(请参阅编译器的编译器标志文档)或 - 甚至更好 - 将所有警告视为错误。