Вложенные функции - для удобства - в качестве контекста требуется кадр стека вмещающей функции.Посмотрите на это:
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, потому что они находятся в области видимости sam какDip()
?Должен ли компилятор убедиться, что конструктор x
уже запущен, или это ваша работа?
А как насчет z?
Если Дип получит доступ как к локальным значениям tripulate
, так и к стековому фрейму, то внутренний прототип будет
void Dip(Foo * this, __auto_struct_Dip * stackContext)
{
// ...
}
Вы в основном реплицировали функциональность структур / классови функции-члены, но по двум несовместимым и неизменным путям.Это большая сложность для сомнительной выгоды.
Я хотел использовать локальные функции несколько раз просто потому, что это лучше указывало бы область, где это необходимо.Но со всеми вопросами ... есть больше полезных вещей, чтобы добавить больше сложности на C ++.