Namespaces
Variants

std:: out_of_range

From cppreference.net
ヘッダーで定義 <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 オブジェクトを作成して使用することが可能です。

ただし、 std::out_of_range オブジェクトは一般的に constexpr にはなりません。なぜなら、動的に割り当てられたストレージはすべて同じ定数式の評価中に解放されなければならないからです。

(C++26以降)
cpp/error/exception cpp/error/logic error std-out of range-inheritance.svg

継承図

目次

メンバー関数

(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)
1) 例外オブジェクトを構築し、説明文字列として what_arg を使用します。構築後、 std:: strcmp ( what ( ) , what_arg. c_str ( ) ) == 0 となります。
2) 例外オブジェクトを構築し、説明文字列として what_arg を使用します。構築後、 std:: strcmp ( what ( ) , what_arg ) == 0 となります。
3) コピーコンストラクタ。 * this other の両方が動的型 std::out_of_range を持つ場合、 std:: strcmp ( what ( ) , other. what ( ) ) == 0 となります。コピーコンストラクタから例外が送出されることはありません。

パラメータ

what_arg - 説明文字列
other - コピーする別の例外オブジェクト

例外

1,2) std::bad_alloc を送出する可能性があります。

注記

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> の 公開メンバ関数)