命名空间std在哪里定义的?

9

我想深入了解命名空间std的内部,但是我在电脑上找不到定义它的文件。我试着在谷歌上搜索,但是没有太大的收获。


4
有许多标准库头文件,每个文件都在std命名空间中定义了一些名字。没有一个单独的文件可以查看。 - juanchopanza
6
无法确定,这取决于您包含了哪些头文件以及这些头文件本身包含了什么。您不应该写 using namespace std;,因为它会带来麻烦。 - juanchopanza
1
它为什么是愚蠢的怒火?命名空间包装了一个作用域。它是一个名称,它被添加到作用域内的所有内容之前,以避免歧义。 - cppguy
3
一个好的方法是知道你需要使用什么,如果你不知道它在哪个头文件里面,就在参考资料(例如http://en.cppreference.com/w/)中查找并包含所需的头文件。 - juanchopanza
1
我认为当你使用 using namespace std 时无法知道正在被包含的内容是很愚蠢的。这也是不建议这样做的原因之一! - juanchopanza
显示剩余7条评论
3个回答

4
在大多数Unix系统上,C++头文件通常存储在/usr/include/c++/<version>/中,其中<version>是GCC/libstdc++版本(即4.94.9.2),或者是libc++版本,即v1
该目录中包含所有(或大多数)标准规定的头文件,这些头文件基本上只是普通的C++代码。对于libstdc++,特别需要注意的是,大多数旧的头文件只包含bits/中的某些内容;很少有C++11特定的头文件会这样做。

3
您可以在此处找到包含在namespace std中的所有内容列表。
如果您使用的是Visual Studio,您可以在本地找到它:~\Microsoft Visual Studio\VC\crt\src 这里还有一个在线表示此处
请注意:自行编辑源文件存在风险,建议不要进行任何编辑。

1
如果他们确实安装了它。 - Puppy

1
许多在std命名空间中实现的内容都是模板化的,这意味着它们的整个实现都在头文件中。例如,std::vector 应该在 vector 头文件中。只需查看您的编译器选项,找出头文件所在的位置即可。
可能会有一些非模板化的父类和独立函数,它们不会在头文件中。同样,查看编译器文档,看看源文件是否包含在某个地方以及它们在哪里。

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