类std::out_of_range在哪里被完整定义了?

6
我正在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类的定义在哪里吗?


1
你看过这个页面了吗? - abiessu
+1 好问题。我也想知道。 - lulyon
2
我已经在gcc的github镜像上为您找到了它:https://github.com/mirrors/gcc/blob/master/libstdc%2B%2B-v3/src/c%2B%2B98/stdexcept.cc,第60行。 - lulyon
4个回答

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

1

std::out_of_range 在C++11标准的§19.2.5类out_of_range[out.of.range]中得到了充分的定义。


0

这些在libstdc++中,它是作为gcc的一部分构建的。您可以下载gcc-core-X.Y.Z.tar.bz2并在其中找到它。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接