C++中的"using"关键字具体是做什么的?

10

关于 "using" 关键字,我发现了一个令人困惑的问题。如果我使用一个类或结构体,那么在同一命名空间中使用以该类或结构体作为参数的函数就不再必要。就像下面的代码一样。

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;
}

我原本认为我不能使用testFunc(),因为我只在testData中使用了"using"关键字。然而,这些代码完全可以正常运行。

您能否告诉我为什么会这样工作?


2
参数相关的查找(Argument Dependent Lookup) - BoBTFish
@BoBTFish 我明白了,非常感谢。 - Astray Bi
1个回答

10

您在使用using的方式上是正确的。

但是您忽略了一个关键点:参数相关查找(argument-dependent lookup)。编译器可以通过提供的test参数看到testFunc

请参阅http://en.cppreference.com/w/cpp/language/adl


哦,我明白了。非常感谢。 - Astray Bi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接