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性的变化会对其他调用函数产生连锁效应,但在那种情况下,编译器给出了非常有效的帮助。
所以我想问的是,人们开发了哪些工作习惯,以确保在代码维护和重构期间实际实现他们预期的异常保证。
throws()
或noexcept
来明确无异常保证(但也要了解throws()
的缺点)。请不要为此目的使用可怕的名称装饰。 - Alan Stokes