在开发旧的 C++ 标准期间,嵌套函数的想法被认为是无用的,因为它的用法基本上被另一个概念(如面向对象编程)所涵盖;还是只是为了简化而实施?
嵌套函数 - 有用 - 需要包含函数的堆栈帧作为上下文。看这个:
class Foo()
{
void Tripulate()
{
int i=0;
void Dip()
{
// ...
}
int x = 12;
for(i=1; i<=3; ++i)
{
int z= 33;
Dip();
// ...
}
}
}
Dip() 应该访问哪些值?
没有任何?您刚刚或多或少地复制了(匿名)名称空间的功能。
只针对 i,因为它是函数之前唯一定义的一个?
仅限于 i 和 x,因为它们与Dip()
?编译器是否必须确保构造函数x
已经跑了,还是你的工作?
那么z呢?
如果 Dip 可以访问两个本地值tripulate
和堆栈帧,所以内部原型是
void Dip(Foo * this, __auto_struct_Dip * stackContext)
{
// ...
}
您基本上已经复制了结构/类和成员函数的功能,但是在两个不兼容且不可交换的路径上。对于一个值得怀疑的收益来说,这是一个很大的复杂性。
我曾多次希望使用本地函数,只是因为这可以更好地指示需要的范围。但对于所有的问题...还有更多有用的东西可以让 C++ 变得更加复杂。
[编辑] 使用 C++0x,lambda 可以做到这一点,允许显式地声明它们捕获的内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)