Что означает термин модуль сослаться на следующее предложение?
Не позволяйте исключениям распространяться через границы модуля.
Это правило 62 в Стандарты кодирования C ++ Херб Саттер и Андрей Александреску.
Я сейчас прочитал книгу, поэтому я хотел бы процитировать резюме раздела, которое, я думаю, добавляет некоторую ясность:
Не бросайте камни в сад вашего соседа: нет универсального бинарного стандарта для обработки исключений в C ++. Не позволяйте исключениям распространяться между двумя частями кода, если вы не контролируете параметры компилятора и компилятора, используемые для сборки обеих сторон; в противном случае модули могут не поддерживать совместимые реализации для распространения исключений. Как правило, это сводится к следующему: не позволяйте исключениям распространяться через границы модуля / подсистемы.
Это хороший вопрос. Стандарт C ++ не использует слово
модуль (я не думаю, по крайней мере), и обычный повседневный смысл
это что-то вроде единицы перевода. За исключением того, что это не может быть
что Херб и Андрей имеют в виду, так как реальная цель использования
Исключением является распространение из местного тела
код — в противном случае вы бы использовали коды возврата.
Я могу только догадываться, но они, вероятно, имеют в виду то, что может
разумно быть реализованным в другой DLL. Размножение
исключения через границы DLL может быть быть проблемой, если
DLL были скомпилированы с другим компилятором, или использовать
другой язык. Иначе…
Обычно считается лучшей практикой иметь одну попытку / поймать
блок в главном (или в некоторой другой функции высокого уровня, в каждом
нить), и ловить все исключения там, независимо от того, где
они из. И нет проблем с современными компиляторами, когда вы делаете это.
Я не читал эту книгу, но похоже, что это, скорее всего, концепция модуля, описанная в этом PDF из Мичиганского университета.
То есть. Модуль — это отдельный модуль компиляции, который обычно состоит из заголовочного файла и исходного файла.
Это имеет смысл в контексте вашей цитаты из книги, поскольку особое внимание уделяется контролю над компиляцией. Если у вас есть автономная функциональность в одном модуле компиляции (модуле), вам никогда не придется беспокоиться о том, что ваша скомпилированная функциональность станет неполной из-за зависимости от конкретной функции компилятора.