为什么本地类不能从封闭范围访问变量?

时间:2016-10-01 13:44:34

标签: c++

A local class cannot access local variables of the function in which it is defined

这是为什么?这个规则在C ++中的原因是什么?

1 个答案:

答案 0 :(得分:2)

这是一个合理的问题,特别是因为一些常用语言,例如Python,允许这样做。

但是,如果允许对locals的引用,并且假设此代码可以编译,请考虑这种情况。

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也存在同样的问题。

关于为什么这是一个权威的答案,我浏览了第4版Stroustrup并且没有看到任何有用的报道。

感谢有趣的问题。