gpt4 book ai didi

c++ - 前向声明和友元函数

转载 作者:太空宇宙 更新时间:2023-11-04 11:56:47 26 4
gpt4 key购买 nike

关注这里的问题如果我像这样省略 namespace :

void f(window);

class window{
private:
int a;
friend void ::f(window);
};

void f(window rhs){
std::cout << rhs.a << std::endl;
}

我有奇怪的行为:

friend void f(window);

编译时没有 f(window) 的前向声明,但是

friend void ::f(window);

不会:

error C2039: 'f' : is not a member of '`global namespace''

有人能解释一下原因吗?如果无论如何我们都在全局命名空间中,为什么::会产生这种差异...

谢谢?

最佳答案

如果您没有在友元声明中限定 f,它的行为也像一个普通声明,并在周围的命名空间(在您的情况下是全局的)中声明 f

但是,如果你明确地将它限定为::f,它就不再是f的声明,而只是一个想要引用一个已经声明的友元声明f。但是没有,因此出现错误。

关于c++ - 前向声明和友元函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15900651/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com