相关疑难解决方法(0)

用户定义的文字,下划线和全局名称

在C++ 11中,我们获得了用户定义的文字.C++标准有这些例子,例如:

long double operator "" _w(long double);
Run Code Online (Sandbox Code Playgroud)

它说文字应该以下划线开头:

17.6.4.3.5用户定义的文字文字
不以下划线开头的文字符号标识符保留用于将来的标准化.

但是,标准中还有另一部分说

17.6.4.3.2全局名称
某些名称和函数签名集始终保留给实现:
- 每个包含双下划线_ _的名称或以下划线后跟大写字母(2.12)开头的名称保留给实现任何用途.
- 以下划线开头的每个名称都保留给实现,以用作全局名称空间中的名称.

我希望更好地理解17.6.4.3.2(全局名称)所说的/意味着什么以及它与17.6.4.3.5(用户定义的字面文字)的关系.特别:

  • 17.6.4.3.2(全局名称)的第二部分是否要求_w在命名空间中定义用户定义的文字(如上所述)(即不在全局命名空间中)?如果是这样,我希望标准能说明这一点.
  • 我假设17.6.4.3.2(全局名称)的第一部分排除了用户定义的文字,如_W(大写)__w_w__(两个连续的下划线).正确?

编辑:

作为后续行动,标准的一部分说:

13.5.8用户定义的文字
[...]
2 声明者id为文字操作符id的声明应该是命名空间范围函数或函数模板的声明(它可以是友元函数(11.3)),函数模板的显式实例化或特化,或者使用声明(7.3.3).使用literal-operator-id声明的函数是文字运算符.使用literal-operator-id声明的函数模板是文字运算符模板.

强调我的.当它说"namespace-scope"时,这意味着用户定义的文字需要在用户定义的命名空间中声明(即不在全局命名空间中)?

稍后编辑:

当问题第一次被问到时它不存在,但现在也有这个相关的问题和答案,读者可以在审查下面的答案后另外检查.

c++ c++11

10
推荐指数
1
解决办法
1170
查看次数

标签 统计

c++ ×1

c++11 ×1