未在命名空间中声明和定义的命名空间类的朋友

问题描述

这样做正确吗?

void f();

namespace ns
{
    class C
    {
        int m;
        friend void ::f();
    };
}

void f()
{
    ns::C c;
    c.m = 2;
}

该代码已在VS中成功编译。但是我找不到有关在标准中为朋友声明限定名称空间的任何信息。合法吗?有人可以提供标准的链接或报价吗?

解决方法

是的,合法的。

namespace仅仅是为函数,类等添加另一层描述的方法。

即使friend与该函数位于不同的class中,也可以在class内将任何函数标记为namespace。该函数也可以位于namespace中。

标准中没有关于此的特定部分,但这是标准的必然结果。此参考是一个起点:https://en.cppreference.com/w/cpp/language/namespace

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...