"using"关键字在c ++中究竟做了什么?

Ast*_* Bi 9 c++

我发现关于"使用"关键字的一个令人困惑的事情.如果我使用类或结构,那么就没有必要在同一名称空间中使用函数,该函数将该类或结构作为参数.像下面的代码.

namespace A
{
    struct testData
    {
        int x;
    };

    int testFunc(testData data)
    {
        return data.x;
    }
}

#include <cstdio>;

using A::testData;

int main()
{
    testData test = { 1 };
    printf("%d", testFunc(test));

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我以为我不应该被允许使用testFunc(),因为我只对testData使用"using"关键字.但是,这些代码工作得很好.

你能告诉我为什么这样做吗?

Bat*_*eba 9

你的工作方式是正确的using.

但是你忘记了一件事:依赖于参数的查找.编译器可以testFunc通过test提供的参数查看.

http://en.cppreference.com/w/cpp/language/adl