6

我正在/usr/include/c++我的 Ubuntu Linux 上搜索。在/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

4 回答 4

3

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

于 2013-07-24T02:44:11.930 回答
1

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

于 2013-07-24T05:31:01.627 回答
0

那些是libstdc++作为gcc. 您可以在那里下载gcc-core-X.Y.Z.tar.bz2并找到它。

于 2013-07-24T02:43:31.260 回答
0

干得好

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

请记住,libstdc++ 不再作为单个库分发,但库的源代码实际上与 gcc 捆绑在一起,因此要下载 libstdc++,您必须下载 gcc。

于 2013-07-24T05:42:43.117 回答