codechaser
V2EX  ›  C++

cpp 问题请教

  •  
  •   codechaser · Nov 9, 2019 · 3971 views
    This topic created in 2401 days ago, the information mentioned may be changed or developed.
    #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 replies    2019-11-10 09:43:22 +08:00
    koebehshian
        1
    koebehshian  
       Nov 9, 2019   ❤️ 1
    当然是靠参数的命名空间猜到: https://en.cppreference.com/w/cpp/language/adl
    RicardoY
        2
    RicardoY  
       Nov 9, 2019 via Android   ❤️ 1
    函数的参数是类类型的话就还要查找参数类型所在的命名命名空间吧..依稀记得 primer 上特意提过
    codechaser
        3
    codechaser  
    OP
       Nov 9, 2019
    @RicardoY 受教!
    jorneyr
        4
    jorneyr  
       Nov 10, 2019
    void f(Foo) 不报错,因为函数 f 和结构体 Foo 在同一个命名空间里,仔细看括号。

    只有使用类型的时候才需要命名空间 (即访问 Foo),foo 已经是变量了。
    codechaser
        5
    codechaser  
    OP
       Nov 10, 2019
    @jorneyr 我想问的是 f(foo)的调用为啥不会报错。f 是在 foo 里的啊
    jorneyr
        6
    jorneyr  
       Nov 10, 2019
    @codechaser 发现看错地方了 =_=!!!
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2904 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 13:51 · PVG 21:51 · LAX 06:51 · JFK 09:51
    ♥ Do have faith in what you're doing.