У меня создалось впечатление, что использование setjmp()
и longjmp()
в C++ почти гарантировало испортить стек, поскольку эти функции не выполняют разматывание, как, скажем, исключения. Однако This MSDN page указывает, что реализация Microsoft может быть вызвана для вызова деструкторов локальных объектов, что подразумевает, что тщательное использование этих функций может быть безопасным.Есть ли безопасный способ использования setjmp() и longjmp() в C++?
Есть ли переносное средство обеспечения правильности программы при использовании setjmp()
и longjmp()
в C++? Лучшие практики на C++ указывают на то, что исключения лучше не использовать для управления потоком, но в ситуации, которая требует очень необычного потока (например, сопрограммы и замыкания), всегда предпочтительнее использовать исключения вместо этих функций?
Для сопроводительных сообщений см. [* Как внедрить Coroutines в C++ *] (http://stackoverflow.com/questions/121757/how-do-you-implement-coroutines-in-c). – kennytm
«в ситуации, которая требует очень необычного потока», действительно лучше спросить, как реализовать этот особый * необычный рабочий процесс *. Абстрактные вопросы редко приносят полезные ответы. – Dummy00001
@ Dummy00001: Я вообще ссылался на различные применения 'setjmp()'/'longjmp()', предлагая примеры необычных конструктов управления, не пытаясь предположить, что я использую какой-то другой вид управления потоком данных магия. Я только спрашивал, есть ли безопасный способ использовать эти функции на C++, и я получил свой ответ. –