类std :: out_of_range在哪里完全定义?

时间:2013-07-24 02:24:14

标签: c++

我在我的Ubuntu Linux上的/usr/include/c++下搜索。在/usr/include/c++/stdexcept中,我发现了这一点:

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类定义的位置?

4 个答案:

答案 0 :(得分:3)

他们可能在libstdc++中定义。您可以在GCC website上获取源代码。在Ubuntu发行版上,您只安装了库(libstdc++.so),而不是源代码。你找到的东西只是声明,而不是定义。

答案 1 :(得分:1)

std::out_of_range在C ++ 11标准的§19.2.5Classout_of_range [out.of.range] 中完全定义。

答案 2 :(得分:0)

这些是libstdc++,它是gcc的一部分。您可以下载gcc-core-X.Y.Z.tar.bz2并在那里找到它。

答案 3 :(得分:0)

你去吧

http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-3.4/stdexcept_8cc-source.html

请记住,libstdc ++不再作为单个库分发,但是库的源实际上是与gcc捆绑在一起的,所以要下载libstdc ++,你必须下载gcc。