为什么不允许对成员函数的内联定义进行额外的限定

Why is an extra qualification for inline definitions of member functions disallowed?

本文关键字:定义 不允许 成员 函数 为什么      更新时间:2023-10-16

如果我们看一下成员声明的语法,它会得到这样的内容:

会员声明:       函数定义 ;函数定义:       attribute-specifier-seqopt decl-specifier-seqopt declarator       virt-specifier-seqopt function-body说明符:       noptr-declarator 参数和限定符尾随返回类型

这不允许语法:

struct B {
    A B::*B::read();
};

为什么它不允许在函数名称前使用可选nested-name-specifier ::

语法根本不禁止声明由嵌套名称说明符s 命名的实体。
事实上,对于friend声明,它必须:

class A
{
     friend void OtherNamespace::foo();
};

这是一个成员声明,声明说明符friend 。它被覆盖了(粗体强调我的(:

成员声明
    属性说明符-seq opt deccl-specifier-seqopt成员声明符列表opt ;

成员声明器
     声明符 virt-specifier-seq opt pure-specifieropt

现在,声明符具有以下语法:

声明符
    PTR 声明符

PTR 声明符
    noptr-declarator

noptr-declarator:
    声明符标识

声明符 ID
     ... 选择身份表达式

最后,一个 id 表达式是

id-expression
    限定 id