std:: out_of_range
|
ヘッダーで定義
<stdexcept>
|
||
|
class
out_of_range
;
|
||
範囲外の要素へのアクセス試行の結果として発生するエラーを報告する、例外としてスローされるオブジェクトの型を定義します。
これは、 std::bitset および std::basic_string のメンバー関数、 std::stoi および std::stod ファミリーの関数、そして境界チェック付きメンバーアクセス関数(例: std::vector::at および std::map::at )によってスローされる可能性があります。
std::out_of_rangeのすべてのメンバー関数は
std::out_of_range
constexpr
です:定数式の評価中に
std::out_of_range
オブジェクトを作成して使用することが可能です。
ただし、
|
(C++26以降) |
継承図
目次 |
メンバー関数
|
(constructor)
|
指定されたメッセージで新しい
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) | (constexpr since C++26) |
|
out_of_range
(
const
char
*
what_arg
)
;
|
(2) | (constexpr since C++26) |
|
out_of_range
(
const
out_of_range
&
other
)
;
|
(3) |
(noexcept since C++11)
(constexpr since C++26) |
std::out_of_range
を持つ場合、
std::
strcmp
(
what
(
)
, other.
what
(
)
)
==
0
となります。コピーコンストラクタから例外が送出されることはありません。
パラメータ
| what_arg | - | 説明文字列 |
| other | - | コピーする別の例外オブジェクト |
例外
注記
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)
(C++26以降constexpr) |
|
other
の内容を代入します。
*
this
と
other
の両方が動的型
std::out_of_range
を持つ場合、代入後は
std::
strcmp
(
what
(
)
, other.
what
(
)
)
==
0
となります。コピー代入演算子から例外が送出されることはありません。
パラメータ
| other | - | 代入する別の例外オブジェクト |
戻り値
* this
注記
LWG issue 471
の解決後、派生した標準例外クラスは公開アクセス可能なコピー代入演算子を持たなければなりません。
what()
によって得られる説明文字列が元のオブジェクトとコピーされたオブジェクトで同じである限り、暗黙的に定義することができます。
std:: logic_error から継承
std::exception から継承
メンバ関数
|
[virtual]
|
例外オブジェクトを破棄
(
std::exception
の仮想公開メンバ関数)
|
|
[virtual]
|
説明文字列を返す
(
std::exception
の仮想公開メンバ関数)
|
注記
標準エラー条件 std::errc::result_out_of_range は通常、入力ではなく結果が範囲外である状態を示し、 std::range_error および ERANGE により密接に関連しています。
| 機能テスト マクロ | 値 | 標準 | 機能 |
|---|---|---|---|
__cpp_lib_constexpr_exceptions
|
202502L
|
(C++26) | constexpr 例外型 |
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 254 | C++98 | const char * を受け取るコンストラクタが欠如していた | 追加された |
| LWG 471 | C++98 |
std::out_of_range
のコピーの説明文字列が
実装定義であった |
元の
std::out_of_range
オブジェクトの
説明文字列と同じである |
関連項目
|
境界チェック付きで指定された文字にアクセスする
(
std::basic_string<CharT,Traits,Allocator>
の
公開メンバ関数)
|
|
|
境界チェック付きで指定された文字にアクセスする
(
std::basic_string_view<CharT,Traits>
の
公開メンバ関数)
|
|
|
境界チェック付きで指定された要素にアクセスする
(
std::deque<T,Allocator>
の
公開メンバ関数)
|
|
|
境界チェック付きで指定された要素にアクセスする
(
std::map<Key,T,Compare,Allocator>
の
公開メンバ関数)
|
|
|
境界チェック付きで指定された要素にアクセスする
(
std::unordered_map<Key,T,Hash,KeyEqual,Allocator>
の
公開メンバ関数)
|
|
|
境界チェック付きで指定された要素にアクセスする
(
std::vector<T,Allocator>
の
公開メンバ関数)
|
|
|
境界チェック付きで指定された要素にアクセスする
(
std::array<T,N>
の
公開メンバ関数)
|
|
|
(C++26)
|
境界チェック付きで指定された要素にアクセスする
(
std::span<T,Extent>
の
公開メンバ関数)
|