我在我的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
类定义的位置?
答案 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。