V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
v2byy
V2EX  ›  C

namespace std 是在哪里定义的?

  •  
  •   v2byy · 2018-11-06 09:00:29 +08:00 · 2381 次点击
    这是一个创建于 2239 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    shylockhg
        1
    shylockhg  
       2018-11-06 09:12:09 +08:00   ❤️ 1
    grep -r 'namespace\.*std'
    v2byy
        2
    v2byy  
    OP
       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
        3
    arzterk  
       2018-11-06 09:13:20 +08:00   ❤️ 1
    一般是宏定义的啊,_STD_xxx 这种
    shylockhg
        4
    shylockhg  
       2018-11-06 09:15:26 +08:00
    随手打的真不靠谱,换这个吧 grep -r 'namespace\s\+std'
    wutiantong
        5
    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
        6
    mason961125  
       2018-11-06 09:51:48 +08:00 via iPhone
    我觉得,你应该搜 namespace std,而不是 std namespace。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1551 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 16:52 · PVG 00:52 · LAX 08:52 · JFK 11:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.