在编写异常安全代码时,需要考虑所有调用函数的异常安全保证(none、basic、strong 或 no-throw)。由于编译器没有提供任何帮助,我认为函数命名约定在这里可能会有所帮助。是否有任何一种既定的符号标准来指示功能提供的异常安全保证水平?我在想类似匈牙利语的东西:
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 非常相似,其中函数 const 的变化会对其他调用函数产生级联影响,但在这种情况下,编译器会提供非常有效的帮助。
所以我想我的问题是,人们养成了什么样的工作习惯,以确保代码真正满足他们预期的异常保证,尤其是在代码维护和重构期间。