namespace std 是在哪里定义的?

2018-11-06 09:00:29 +08:00
 v2byy

我想知道 std namespace 是在哪个文件中定义的。

比如 vector 头文件,定义在 std namespace 中,但是我没有在 vector 头文件中找到 namespace std 相关的东西。

我知道同一个 namespace 可以跨文件

2291 次点击
所在节点    C
6 条回复
shylockhg
2018-11-06 09:12:09 +08:00
grep -r 'namespace\.*std'
v2byy
2018-11-06 09:12:39 +08:00
好吧,问题解决。
首先我用 notepad++在 msvc 的 include 路径下搜索了 namespace std, 发现是 yvals_core.h 文件中使用了宏

```cpp
/* NAMESPACE */
#define _STD_BEGIN namespace std {
#define _STD_END }
#define _STD ::std::
```

然后再搜索一下_STD_BEGIN,就发现了。
arzterk
2018-11-06 09:13:20 +08:00
一般是宏定义的啊,_STD_xxx 这种
shylockhg
2018-11-06 09:15:26 +08:00
随手打的真不靠谱,换这个吧 grep -r 'namespace\s\+std'
wutiantong
2018-11-06 09:19:58 +08:00
你 C++怎么学的?
namespace 谈何定义啊?

你找不到不代表就没有,std::vector 肯定是定义在 std namespace 里面的。
但 std namespace 相关的地方可能被做成了 macro,比如_LIBCPP_BEGIN_NAMESPACE_STD。

另外标准规定,除了个别情况(特例化 std::hash )不允许在 std namespace 里自定义代码。
mason961125
2018-11-06 09:51:48 +08:00
我觉得,你应该搜 namespace std,而不是 std namespace。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/504858

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX