Формально нет ни каких запретов на
: к тому моменту, когда исполнение доберётся до декларации
n уже известно и можно увеличить стек на размер массива и потом учесть в адресах следующих локальных переменных. Но обратите внимание: стек увеличивается на неизвестную на этапе разработки величину, что не есть хорошо, так как не позволяет адекватно настроить максимальный размер стека. Рекурсия страдает тем же самым, но иногда просто нет другого выхода, кроме как использовать рекурсию. К тому же есть ведь ещё хвостовая рекурсия, она этим не страдает. Такому же массиву альтернатива есть всегда. На этапе разработки n не известно, а суммарный размер локальных переменных, хоть тест этого и не показывает, должен быть известен на этапе разработки, так как только так можно обеспечить предсказуемый расход стека, а он дефицитнее кучи. Опасность указателей - полумиф, опасны лишь те указатели, которые выдаются наружу. А внутри одного проекта программист уж точно знает, где у него какой указатель валяется и с чем его "едят". Даже если программистов много и один указатель декларировал, другой присвоил, третий передал внутри проекта, четвертый использует. Всё равно. Это такая же переменная, как какой нибудь инт. В интах ни кто не путается? Чем же указатели хуже? Не знаешь - не трогай, трогаешь - узнай, не можешь - не программируй. И ни каких утечек памяти из указателей не вытекает. Я программирую с весны 1995-го года и до сих пор
не смог получить утечку памяти. Видимо для этого как раз и нужны умные указатели, или странные то ли указатели то ли ссылки. В любую же функцию, или оператор массив в любом случае именно как указатель и передаётся. Не нравится, когда указатель валяется на самом виду? Ну инкапсулируйте. В чём проблема? Тогда автор класса будет полностью отвечать за все операции с указателем, количество кривых рук с допуском к указателю резко сократится. Вы же этого хотите? При
же это как раз не достигается, указатель будет лишь слегка прикрыт граблями. Причём, стеклянными.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.