1. ホーム
  2. c++

[解決済み】ノレターンのポイントとは?

2022-04-07 05:53:49

質問

[dcl.attr.noreturn]です。 は、次のような例を提供しています。

[[ noreturn ]] void f() {
    throw "error";
    // OK
}

の意味がわかりません。 [[noreturn]] なぜなら、関数の戻り値の型はすでに void .

では、何のために noreturn 属性は何ですか?どのように使用することになっているのでしょうか?

どのように解決するのですか?

noreturn属性は、呼び出し元に戻らない関数に使用することを想定しています。これは、void関数(呼び出し元に戻るが、値を返さない)ではなく、関数が終了しても制御フローが呼び出し元の関数に戻らない関数(例えば、アプリケーションを終了する関数、永久ループ、あなたの例のように例外をスローする関数)を意味します。

これを利用して、コンパイラはいくつかの最適化を行い、より良い警告を生成することができます。例えば f が noreturn 属性を持っている場合、コンパイラは次のような警告を出すことができます。 g() を書くと、デッドコードになります。 f(); g(); . 同様に、コンパイラは、以下の呼び出しの後に return 文がないことを警告しないことも知っています。 f() .