A local class cannot access local variables of the function in which it is defined
这是为什么?这个规则在C ++中的原因是什么?
答案 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并且没有看到任何有用的报道。
感谢有趣的问题。