V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
v2byy
V2EX  ›  C

namespace std 是在哪里定义的?

  •  
  •   v2byy · Nov 6, 2018 · 2783 views
    This topic created in 2734 days ago, the information mentioned may be changed or developed.

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

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

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

    shylockhg
        1
    shylockhg  
       Nov 6, 2018   ❤️ 1
    grep -r 'namespace\.*std'
    v2byy
        2
    v2byy  
    OP
       Nov 6, 2018
    好吧,问题解决。
    首先我用 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  
       Nov 6, 2018   ❤️ 1
    一般是宏定义的啊,_STD_xxx 这种
    shylockhg
        4
    shylockhg  
       Nov 6, 2018
    随手打的真不靠谱,换这个吧 grep -r 'namespace\s\+std'
    wutiantong
        5
    wutiantong  
       Nov 6, 2018
    你 C++怎么学的?
    namespace 谈何定义啊?

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

    另外标准规定,除了个别情况(特例化 std::hash )不允许在 std namespace 里自定义代码。
    mason961125
        6
    mason961125  
       Nov 6, 2018 via iPhone
    我觉得,你应该搜 namespace std,而不是 std namespace。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   780 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 20:20 · PVG 04:20 · LAX 13:20 · JFK 16:20
    ♥ Do have faith in what you're doing.