首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

不理解。解决方法

2012-03-02 
不理解。。。回忆一下,当一个类声明友元函数的时候,函数的声明不必是可见的。如果不存在可见的声明,那么,友元

不理解。。。
回忆一下,当一个类声明友元函数的时候,函数的声明不必是可见的。如果不存在可见的声明,那么,友元声明具有将该函数或类的声明放入外围作用域的结果。如果类在命名空间内定义,则没有另外声明的友元函数在同一命名空间中声明。
namespace   A{
class   C{
friend   void   f(const   C&);   //make   f   a   member   of   namespace   A
}
}
        因为该友元接受类类型实参并与类隐式声明在同一命名空间中,所以使用它时可以无须使用显式命名空间限定符:
        //   f2   defined   at   golbal   scope
        Void   f2()
        {
          A::C   cobj;
                  f(cobj);//calls   A::f
        }


如题。。。这内容要怎么理解。。。而且,最后一句话:因为该友元接受类类型实参并与类隐式声明在同一命名空间中,所以使用它时可以无须使用显式命名空间限定符,这句话又要怎么理解。。。    

[解决办法]
这段话是哪儿的?说的这么晦涩……
上面这个例子应该是说明koenig查找规则的。也就是:C++标准规定,对于没有明确指定名字空间的情形,可以考虑其他名字空间,特别是正被传给函数的参数的类型所在的名字空间。
在f2函数中,它会调用f函数,但是它本身的作用域没有这个函数,而且函数f也没有指定名字空间,而编译器看到f函数传入参数的类型是在名字空间A中,所以根据标准,编译器应该到名字空间A中继续查找是否存在函数f,这个时候找到了,于是编译器就通过了关于函数f的编译

热点排行