允许的成员函数声明中的限定名
Is qualified name in the member function declaration allowed?
此代码被MSVC9.0接受。我的问题是,根据标准(旧的和/或新的),它是否合法。如能提供报价,我也非常感谢。
class X
{
void X::f();
};
不,这是无效的。这里,X::f
是限定名;您试图将其用作声明符id。c++ 8.3 (dcl 03。含义]/1列出声明符id可能符合条件的情况:
除
外,声明符id不限定
外部成员函数或静态数据成员的定义
外部命名空间的函数或变量成员的定义或显式实例化或
先前在其命名空间外声明的显式专门化的定义,或者
友元函数的声明,该友元函数是另一个类或命名空间的成员。
因为X::f
不属于这四种类别,所以是不正确的。
要求类定义之外的成员函数定义必须限定的规则可以在c++ 03 9.3[class.mfct]/5:
中找到。如果成员函数的定义在词法上超出其类定义,则成员函数名应使用
::
操作符由其类名限定。
根据c++ 03规范,无效
参考- c++ 03标准:
一节8.3美元:
每个声明符只包含一个声明符id;它为声明的标识符命名。除了一些特殊函数的声明(12.3,12.4,13.5)和模板特化或部分特化的声明(14.7)之外,声明器id的id表达式应该是一个简单的标识符。 declarator-id不得限定除了成员函数的定义(9.3)或(9.4)或嵌套类静态数据成员(9.7)在它的类之外,的定义或显式实例化一个函数,变量或类成员以外的一个名称空间的名称空间,或者先前宣布的定义明确的专业化以外的名称空间,或者一个朋友函数的声明这是一个另一个类的成员或命名空间(11.4)。
我希望我得到了以上的适当含义。我承认我读过。理解《标准报》上的引语让我有点头晕。如果我理解错了,请告诉我。
- 如何使用指针传递给函数的数组中对象的函数成员
- c++构造函数成员初始化:传递参数
- 创建 std::函数,它返回具有函数成员值的变量.分段错误
- 如何在C++通过公共函数访问私有函数成员?
- 解释了构造函数成员初始化列表
- 调用std::函数成员时内存损坏
- 是否可以为模板类的模板函数成员设置别名?
- 捕获 lambda 函数C++成员变量
- 构造函数成员初始值设定项跨成员列出,安全吗?
- 获取与在模板参数中传递的函数成员类型相同的类
- 如何从公共函数成员访问地图私有成员
- C 构造函数成员分配优化
- 使用命名空间进行函数成员定义
- 函数成员作为 CUDA 内核的参数
- 模板基类函数成员的别名
- 函数成员中用于void和继承的enable_if
- 头文件中是否定义了一个很长的Class函数成员
- 类内/构造函数成员初始化
- 使用指向部分专用函数成员的指针自动填充向量
- 指向函数成员的指针