При написании кода безопасности исключений необходимо учитывать гарантию безопасности исключений (нет, базовая, сильная или безбросковая) для всех вызываемых функций. Поскольку компилятор не предлагает никакой помощи, я подумал, что соглашение об именовании функций может быть полезным здесь. Существует ли какой-либо установленный стандарт обозначений, указывающий уровень гарантии безопасности исключений, предлагаемый функциями? Я думал о чем-то похожем на венгерский:
void setFooB(Foo const& s); // B, offers basic guarantee
int computeSomethingS(); // S, offers strong guarantee
int getDataNT() throws(); // NT, offers no-throw
void allBetsAreOffN(); // N, offers no guarantee
Редактировать: я согласен с комментариями, что этот вид именования уродлив, поэтому позвольте мне уточнить причины, по которым я предлагаю.
Скажем, я реорганизую некоторый код и в этом процессе изменю уровень безопасности исключений, предлагаемый функцией. Если гарантия изменилась, скажем, с сильной на базовую (возможно, это объясняется повышением скорости), то каждая функция, которая вызывает измененную функцию, должна быть пересмотрена для обеспечения их исключительной безопасности. Если бы изменение в гарантии также вызвало изменение имени функции, это позволило бы компилятору немного помочь мне, по крайней мере, пометить все варианты использования измененной функции. Это было моим обоснованием для предложенного выше соглашения об именах, как бы проблематично оно ни было. Это очень похоже на const, где изменение константности функции оказывает каскадное влияние на другие вызывающие функции, но в этой ситуации компилятор очень эффективно помогает.
Таким образом, я предполагаю, что мой вопрос заключается в том, какие рабочие привычки разработали люди для того, чтобы гарантировать, что код на самом деле выполняет свои предполагаемые гарантии исключений, особенно во время обслуживания кода и рефакторинга.