std::out_of_range
| ヘッダー <stdexcept> で定義 |
||
| class out_of_range; |
||
定義される範囲外の要素にアクセスしようとした結果として発生するエラーを報告するためにスローされる例外オブジェクトの型。
std::bitset および std::basic_string のメンバ関数、std::stoi および std::stod ファミリの関数、そして境界チェック付きメンバアクセス関数(例: std::vector::at および std::map::at)によってスローされる場合があります。
継承図
目次 |
[編集] メンバ関数
| (コンストラクタ) |
指定されたメッセージで新しいout_of_rangeオブジェクトを構築します。(public member function) |
| operator= |
out_of_rangeオブジェクトを置き換えます。(public member function) |
std::out_of_range::out_of_range
| out_of_range( const std::string& what_arg ); |
(1) | |
| out_of_range( const char* what_arg ); |
(2) | |
| out_of_range( const out_of_range& other ); |
(3) | (C++11 以降 noexcept) |
std::out_of_rangeを持つ場合、 std::strcmp(what(), other.what()) == 0 となります。コピーコンストラクタから例外がスローされることはありません。パラメータ
| what_arg | - | 説明文字列 |
| その他 | - | コピーする別の例外オブジェクト |
例外
注釈
std::out_of_rangeのコピーが例外をスローしないようにするため、メッセージは通常、別途割り当てられた参照カウント文字列として内部的に格納されます。このため、std::string&& を受け取るコンストラクタも存在しません。いずれにしても内容をコピーする必要があるためです。
LWG issue 254 の解決前は、非コピーコンストラクタは std::string のみを受け入れることができました。これにより、std::string オブジェクトを構築するために動的割り当てが必須となりました。
LWG issue 471 の解決後、派生標準例外クラスは公開アクセス可能なコピーコンストラクタを持つ必要があります。what() によって取得される説明文字列が元のオブジェクトとコピーされたオブジェクトで同じである限り、暗黙的に定義することができます。
std::out_of_range::operator=
| out_of_range& operator=( const out_of_range& other ); |
(C++11 以降 noexcept) | |
other の内容で代入します。もし *this と other が両方とも動的型std::out_of_rangeを持つ場合、代入後には std::strcmp(what(), other.what()) == 0 となります。コピー代入演算子から例外がスローされることはありません。
パラメータ
| その他 | - | 割り当てる別の例外オブジェクト |
戻り値
*this
注釈
LWG issue 471 の解決後、派生標準例外クラスは公開アクセス可能なコピー代入演算子を持つ必要があります。what() によって取得される説明文字列が元のオブジェクトとコピーされたオブジェクトで同じである限り、暗黙的に定義することができます。
std::logic_error から継承
std::exception から継承
メンバ関数
| [virtual] |
例外オブジェクトを破棄する ( std::exception の仮想 public メンバー関数) |
| [virtual] |
説明文字列を返す ( std::exception の仮想 public メンバー関数) |
[編集] 注記
標準エラー条件 std::errc::result_out_of_range は、通常、入力ではなく結果が範囲外である状況を示し、 std::range_error および ERANGE により近い関係があります。
[編集] 不具合報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 254 | C++98 | const char* を受け入れるコンストラクタが欠落していた |
追加された |
| LWG 471 | C++98 | std::out_of_range の説明文字列コピーは実装定義であった |
それらは元の std::domain_error オブジェクトと元の std::out_of_range オブジェクト |
[編集] 関連項目
| 境界チェック付きで指定された文字にアクセスする ( std::basic_string<CharT,Traits,Allocator> の public メンバ関数) | |
| 境界チェック付きで指定された文字にアクセスする ( std::basic_string_view<CharT,Traits> の public メンバ関数) | |
| 境界チェック付きで指定された要素にアクセスする ( std::deque<T,Allocator> の public メンバ関数) | |
| 境界チェック付きで指定された要素にアクセスする ( std::map<Key,T,Compare,Allocator> の public メンバ関数) | |
| 境界チェック付きで指定された要素にアクセスする ( std::unordered_map<Key,T,Hash,KeyEqual,Allocator> の public メンバ関数) | |
| 境界チェック付きで指定された要素にアクセスする ( std::vector<T,Allocator> の public メンバ関数) | |
| 境界チェック付きで指定された要素にアクセスする ( std::array<T,N> の public メンバ関数) | |
| (C++26) |
境界チェック付きで指定された要素にアクセスする ( std::span<T,Extent> の public メンバ関数) |