[解決済み】ノレターンのポイントとは?
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()
.
関連
-
[解決済み】LLVMで暗黙のうちに削除されたコピーコンストラクタの呼び出し
-
[解決済み】'cout'は型名ではない
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】クラステンプレートの使用にはテンプレート引数リストが必要です
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] ルール・オブ・スリーとは?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] ムーブセマンティクスとは何ですか?
-
[解決済み] C++11の'typedef'と'using'の違いは何ですか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み】変数 '' を抽象型 '' と宣言できない。
-
[解決済み】「corrupted size vs. prev_size」glibc エラーを理解する。
-
[解決済み】テンプレートの引数1が無効です(Code::Blocks Win Vista) - テンプレートは使いません。
-
[解決済み】'cout'は型名ではない
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み】1つ以上の多重定義されたシンボルが見つかる
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複