[解決済み] C++03のthrow()指定とC++11のnoexceptの違い
疑問点
の違いは何ですか?
throw()
と
noexcept
は、それぞれ実行時およびコンパイル時にチェックされる以外にありますか?
この Wikipedia C++11 の記事
は、C++03 の throw 指定子が非推奨であることを示唆しています。
なぜそうなのか、それは
noexcept
はコンパイル時にすべてをカバーするのに十分な能力があるのでしょうか?
[注意: 私は この質問 と この記事 などがありますが、非推奨の確かな理由はわかりませんでした]。
どのように解決するのですか?
例外指定子が非推奨になったのは
例外指定子は一般にひどい考えです
.
noexcept
が追加されたのは、例外指定子の有用な使い方のひとつである、関数
が
が例外を投げるかどうかを知るためです。つまり、例外をスローする関数とスローしない関数の二者択一になります。
noexcept
以外の throw 指定子をすべて削除するのではなく、throw()
の方が強力だからです。
noexcept
はコンパイル時にブール値に解決されるパラメータを持つことができます。もしこのブール値が真であれば
noexcept
が突き刺さる。もし真偽値が偽であれば
noexcept
は固まらず、関数は投げるかもしれません。
したがって、次のようなことができます。
noexcept
は
struct<typename T>
{
void CreateOtherClass() { T t{}; }
};
は例外を投げるのでしょうか?そうかもしれません、もし
CreateOtherClass
のデフォルトコンストラクタがそうであるなら、そうなるかもしれません。どうやって判断するのでしょう?こんな感じ。
T
このように
struct<typename T>
{
void CreateOtherClass() noexcept(is_nothrow_default_constructible<T>::value) { T t{}; }
};
は、与えられた型のデフォルトコンストラクタが throw した場合に throw します。これは、例外指定子の大きな問題の 1 つである、呼び出しスタックを上へ伝搬できないことを修正するものです。
これは
CreateOtherClass()
.
関連
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み】変数 '' を抽象型 '' と宣言できない。
-
[解決済み] 投げる」と「投げる元」は違うのですか?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] 私的相続、公的相続、保護相続の違いについて
-
[解決済み] C++11の'typedef'と'using'の違いは何ですか?
-
[解決済み] g++とgccの違いは何ですか?
-
[解決済み] constexpr` と `const` の相違点
-
[解決済み] noexceptを本当に使うべきはいつですか?
-
[解決済み】 `throw new Error` と `throw someObject` の違いは何ですか?
最新
-
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++エラー。アーキテクチャ x86_64 に対して未定義のシンボル
-
[解決済み】coutはstdのメンバではない
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み] クラスにデフォルトコンストラクタが存在しない。
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?
-
[解決済み】Enterキーを押して続行する
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません
-
[解決済み] noexceptを本当に使うべきはいつですか?
-
[解決済み] C++で例外指定子を使うべきですか?