C++ 为什么可以';本地类是否从封闭范围访问变量?
C++ 为什么可以';本地类是否从封闭范围访问变量?,c++,C++,为什么会这样?C++中的这个规则的原因是什么?< p>这是一个合理的问题,尤其是因为一些常用的语言,例如Python允许这样做。 但是,如果允许引用局部变量,并且假设该代码可以编译,请考虑这种情况 struct MyClass { virtual fetchValue() = 0; }; MyClass* somefunction(){ int localVariable = 123; struct HypotheticalClass : public MyClass
为什么会这样?C++中的这个规则的原因是什么?< p>这是一个合理的问题,尤其是因为一些常用的语言,例如Python允许这样做。 但是,如果允许引用局部变量,并且假设该代码可以编译,请考虑这种情况
struct MyClass {
virtual fetchValue() = 0;
};
MyClass* somefunction(){
int localVariable = 123;
struct HypotheticalClass : public MyClass {
virtual int fetchValue(){ return localVariable; }
};
return new HypotheticalClass()
}
现在,在somefunction()的末尾返回这个MyClass派生后,它将保持对现在无效的堆栈位置的引用。轰
当然,还有许多其他方法不适当地引用无效堆栈位置,例如,将对该局部变量的引用传递给类以获得访问权。lambdas也存在同样的问题,它可以访问本地引用或进行复制
至于原因的权威答案,我浏览了第四版Stroustrup,没有看到任何有用的报告
谢谢这个有趣的问题。
我知道变量的范围,这是C++作者在本地类上的一个限制,所以首先要把你的事实直接弄明白。C++中类不继承像java类那样的范围。它可能是C++作者所做的一个例外,但问题是为什么他会制造这个异常?我不知道为什么会得到这么多的否决。当然,在这里很难找到权威性的答案,但这并不是一个坏问题。这并不意味着权威的、非推测性的答案不存在。@juanchopanza:没有多少肉,但我真的不知道还有什么肉。无论如何,我已经删去了模棱两可的字眼,把它整理了一下;也许那会有帮助。