friend声明

先看一个例子:

  - file1.cpp
namespace  ns1
{
        
class Test
        
{
                friend 
void func();
        }
;
}


int  main()
{
        ns1::func();
}


- file2.cpp
#include <cstdio>
using namespace std;

namespace  ns1
{
    
void func()
    
{
        printf(
"func in %s", __FILE__);
    }

}
 

按照BS在《C++程序设计语言》(11.5节)的说法,一个友元不应给其外围作用域内引入一个名字。

然而,在"C++ Primer"(第4版, 12.5节)的说法,一个友元会在其外围名字空间域内声明了一个名字。

上面那个例子, VC++ 2005和MingW(gcc 3.4.2)都可以编译通过,且运行正常。

不过据说最新的4.x系列gcc,上面那个代码就编不过了。

版权声明:本文为waterwalk原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。