Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么可以';本地类是否从封闭范围访问变量?_C++ - Fatal编程技术网

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:没有多少肉,但我真的不知道还有什么肉。无论如何,我已经删去了模棱两可的字眼,把它整理了一下;也许那会有帮助。