MENU

【C++】noexceptの概要と使い方

目次

noexceptとは

noexcept は、関数が例外を送出しないことを示すための指定です。これにより、コンパイラはその関数が例外を投げないことを保証し、最適化やエラーハンドリングの最適化を行うことが可能になります。

利点

最適化の向上

例外を投げないことが保証されるため、コンパイラはそれに基づいて最適化を行うことができます。

安全性の向上

関数が例外を投げないことがわかるため、呼び出し側でのエラーハンドリングをより効果的に行うことができます。

注意点

noexcept を過剰に使用すると、意図しない強制終了の原因となることがあります。関数が例外を投げる可能性がある場合は、正確にその挙動を把握してから noexcept を指定するようにしましょう。

noexceptの使い方

関数の宣言

void func() noexcept;

このように関数の宣言で noexcept をつけると、その関数が例外を投げないことを表します。もし関数が意図せず例外を投げてしまった場合には、std::terminate が呼ばれてプログラムが強制終了します。

関数の定義

void func() noexcept {
    // 例外を投げない処理
}

実際の関数の定義でも noexcept を明示することができます。

関数テンプレート

template <typename T>
void func(T value) noexcept(noexcept(T(value))) {
    // T(value) の例外仕様を反映させる
}

テンプレート関数の場合、そのテンプレートパラメータの型のコンストラクタが noexcept であるかどうかを条件に指定することもできます。

具体的には、テンプレート関数が引数 value を受け取る際に、その引数 value の型 T のコンストラクタが例外を投げる可能性があるかどうかを noexcept でチェックし、それに応じて関数全体が noexcept かどうかを決めることができます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

20代の組み込みソフトウェアエンジニア
主な使用言語はC++

---------------------資格---------------------
応用情報技術者
ネットワークスペシャリスト

目次