Ras*_*ann 4 c++ exception hungarian-notation
编写异常安全代码时,必须考虑所有调用函数的异常安全保证(无,基本,强或无抛出).由于编译器没有提供任何帮助,我认为函数命名约定在这里可能会有所帮助.是否有任何已建立的标准标准,表明功能提供的异常安全保证水平?我正在思考匈牙利式的事情:
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
Run Code Online (Sandbox Code Playgroud)
编辑:我同意评论这种命名惯例是丑陋的,所以请允许我详细说明我的建议理由.
假设我重构了一些代码,并在此过程中,更改函数提供的异常安全级别.如果保证已经从强到基(从可能通过提高速度来证明)得到改变,则必须重新考虑调用重构函数的每个函数的异常安全性.如果保证的更改也触发了函数名称的更改,那么它将允许编译器帮助我一点点,至少标记已更改函数的所有用法.这是我建议上面的命名约定的理由,尽管有问题.这与const非常相似,其中函数const的整体变化对其他调用函数具有级联效应,但在这种情况下,编译器会提供非常有效的帮助.
所以我想我的问题是,为了确保代码实际上满足其预期的异常保证,特别是在代码维护和重构期间,人们开发了什么样的工作习惯.
我经常发现自己在注释(doxygen)中记录了,除了无抛出保证之外,我经常使用throw() 异常规范标记,当且仅当确定函数保证不抛出时,异常安全性很重要.
也就是说,我通常更担心代码部分中的异常,其中未处理的异常会导致问题,并在本地处理(确保您的代码通过其他方式异常安全,如RAII,执行外部工作然后合并没有抛出操作的结果 - 没有抛出交换,这是我主动标记的唯一函数throw().
其他人可能有其他经历,但我发现这对我的日常工作来说足够了.
| 归档时间: |
|
| 查看次数: |
926 次 |
| 最近记录: |