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

cpp 问题请教

  •  
  •   codechaser · 34 天前 · 1373 次点击
    这是一个创建于 34 天前的主题,其中的信息可能已经有所发展或是发生改变。
    #include <iostream>
    using namespace std;
    namespace foo
    {
    struct Foo
    {
    };
    void f(Foo)
    {
        cout << "f";
    }
    } // namespace foo
    int main()
    {
        foo::Foo foo;
        f(foo);
        return 0;
    }
    

    这里为什么不会报错呢? foo 命名空间没带直接使用了 f(),跟 foo 这个变量有何关系呢?

    6 回复  |  直到 2019-11-10 09:43:22 +08:00
        1
    koebehshian   34 天前   ♥ 1
    当然是靠参数的命名空间猜到: https://en.cppreference.com/w/cpp/language/adl
        2
    RicardoY   34 天前 via Android   ♥ 1
    函数的参数是类类型的话就还要查找参数类型所在的命名命名空间吧..依稀记得 primer 上特意提过
        3
    codechaser   33 天前
    @RicardoY 受教!
        4
    jorneyr   33 天前
    void f(Foo) 不报错,因为函数 f 和结构体 Foo 在同一个命名空间里,仔细看括号。

    只有使用类型的时候才需要命名空间 (即访问 Foo),foo 已经是变量了。
        5
    codechaser   33 天前
    @jorneyr 我想问的是 f(foo)的调用为啥不会报错。f 是在 foo 里的啊
        6
    jorneyr   33 天前
    @codechaser 发现看错地方了 =_=!!!
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2435 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 22ms · UTC 13:52 · PVG 21:52 · LAX 05:52 · JFK 08:52
    ♥ Do have faith in what you're doing.