例外安全なコードを記述する場合、呼び出されるすべての関数の例外安全性の保証 (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 性を変更すると、他の呼び出し関数にカスケード効果が生じますが、その場合、コンパイラは非常に効果的な支援を提供します。
したがって、私の質問は、特にコードのメンテナンスとリファクタリング中に、コードが意図した例外保証を実際に満たすようにするために、人々がどのような作業習慣を開発してきたかということです。