2013-07-24 7 views
6

私のUbuntu Linuxの/usr/include/c++で検索しています。 /usr/include/c++/stdexceptでは、私はこれが見つかりました:クラスstd :: out_of_rangeは完全に定義されていますか?

class out_of_range : public logic_error 
{ 
public: 
    explicit out_of_range(const string& __arg); 
}; 

をしかし、私はどこでもout_of_range()コンストラクタの定義を見つけることができません。 STLはout_of_range()例外をスローした場合も、それは(stl_vector.hから取られた例)を使用しています

__throw_out_of_range(__N("vector::_M_range_check")); 

そして、私は__throw_out_of_range()を見つけることができる唯一のことは、次のとおりです。

void __throw_out_of_range(const char*) __attribute__((__noreturn__)); 

ことができます親切に言って、out_of_rangeクラスの定義を教えてください。

+1

[このページ](http://en.cppreference.com/w/cpp/error/out_of_range)を見ましたか? – abiessu

+0

+1良い質問です。それも知りたいです。 – lulyon

+2

gccのgithubミラーで見つけました: 、60行目。 – lulyon

答えて

0

これらはgccの一部として組み込まれたlibstdc++にあります。あなたはgcc-core-X.Y.Z.tar.bz2をダウンロードしてそこに見つけることができます。

3

おそらくlibstdc++で定義されています。ソースコードはGCC websiteで入手できます。 Ubuntuのディストリビューションでは、ソースコードではなく、ライブラリがインストールされているだけです(libstdc++.so)。あなたが見つけたものは、宣言だけであり、定義ではありません。

1

std::out_of_rangeが完全§19.2.5クラスC++ 11標準のout_of_range [out.of.range]で定義されています。ここ