首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用户定义的文字、下划线和全局名称

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

Stack Overflow用户
提问于 2012-10-04 06:36:05
回答 1查看 1.4K关注 0票数 10

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

代码语言:javascript
复制
long double operator "" _w(long double);

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

17.6.4.3.5用户-definedffiffixes 不以下划线开头的文本suffix identifiers保留用于将来的标准化。

然而,在标准中还有一个部分说

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

我希望更好地理解17.6.4.3.2 (全球名称)所说的/意思,以及它与17.6.4.3.5 (Userfined文本suffixes)之间的关系。具体地说:

  • 17.6.4.3.2 (全局名称)的第二部分是否要求用户定义的文字(如上面的_w)在命名空间(也就是说,不是在全局名称空间中)中定义?如果是这样的话,我希望标准能说明这一点。
  • 我认为17.6.4.3.2 (全局名称)的第一部分排除了用户定义的文字,比如_W (后面跟着大写)以及__w_w__ (两个连续的下划线)。对,是这样?

编辑:

作为后续行动,有一部分标准规定:

13.5.8用户-defined文本 ..。 2声明符id为文字运算符id的声明应是名称空间范围函数或函数模板的声明(可以是友函数(11.3))、函数模板的显式实例化或专门化或使用-声明(7.3.3)。用文字运算符id声明的函数是文字运算符.用文字运算符id声明的函数模板是文字运算符模板.

强调我的。当它说“命名空间范围”时,这是否意味着用户定义的文字需要在用户定义的名称空间(即不在全局名称空间中)中声明?

稍后编辑:

当这个问题第一次被问到时,它并不存在,但是现在也有了this related question and answer,,读者可以在查看下面的答案之后再检查它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-04 06:47:11

名字里有什么?三个基本概念告诉我们:

4名称是使用标识符(2.11)、运算符-函数-id (13.5)、文字-运算符-id (13.5.8)、转换-函数-id (12.3.2)或模板-id (14.2)表示实体或标签(6.6.4、6.1)。

与13.5.8用户定义的文字over.literal交叉引用

文字-运算符-id: operator ""标识符

虽然文字运算符的名称涉及一个标识符,但该标识符并不表示实体。(或者是一个不同的标识符和不同的名称,它表示另一个实体或标签。)因此,文字运算符的名称从不以下划线开头。

operator""__w这样的东西是有问题的,但这并不新鲜:int i__0;也是保留的。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12721584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档