【问题标题】:In C++ why can I access a function defined in a namespace without namespace qualifer [duplicate]在 C++ 中,为什么我可以访问在没有命名空间限定符的命名空间中定义的函数 [重复]
【发布时间】:2021-02-05 23:40:42
【问题描述】:

我有一个命名空间。在 ns 中,我定义了一个类和一个函数。我进一步将函数定义为类的朋友,以便函数可以访问类的私有变量。在主程序中,我成功调用了该函数,而没有使用ns::对其进行quflifying。详情请看代码。

#include <iostream>

namespace ns {
    class MyClass;
    void print_fn(const MyClass & c);
}

namespace ns {
    class MyClass {
    private:
        int _a;
    public:
        MyClass(int a): _a(a) {}

        friend void print_fn(const MyClass & c);
    };

    void print_fn(const MyClass & c){
        std::cout << c._a << std::endl;
    }
}


int main()
{
    ns::MyClass c(10);
    print_fn(c);

    return 0;
}

【问题讨论】:

    标签: c++ namespaces friend function-declaration argument-dependent-lookup


    【解决方案1】:

    这称为参数依赖查找。

    编译器在声明其参数的命名空间中搜索函数。

    您可以通过以下方式禁用参数相关查找

     ( print_fn )(c);
    

    在这种情况下,编译器会发出一个错误,即找不到函数print_fn

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-27
      • 2015-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-16
      相关资源
      最近更新 更多