下划线、名称和文字运算符

2024-01-10

我关于名称中下划线的问题得到了部分回答here, https://stackoverflow.com/q/12721584/1275653但要么答案不完整,要么我不完全理解。

教派。 C++11 标准的 2.14.8.7 声明了这一点文字运算符举个例子:

long double operator "" _w(long double);

除了声明运算符之外,该标准及其示例还做了另外两件事,如果单独查看,每件事都有意义:

  • 它开始于名字_w带下划线;和
  • 它将运算符放在全局命名空间中。

我的问题有两个部分:

  1. 根据上面链接的答案, https://stackoverflow.com/q/12721584/1275653名字_w不是一个标识符,或标识符_w不是一个name,或者……好吧,我很困惑。
  2. If _w可以,然后是大写_W也可以——如60.0_W, 意义60.0瓦?或者预处理器可能会错误地处理大写版本?

毫无疑问,和你一样,我不习惯用下划线开头全局名称,这是标准派的习惯。 17.6.4.3.2.1 似乎明确弃用。因此,如果您能对下划线、名称和文字运算符的问题提供一些额外的了解,我们将不胜感激。


好的,我向 Clang 团队的 Richard Smith 进行了核实,发现_W文字运算符中的部分确实不是保留的标识符和/或名称,它也是一个单独的预处理器标记,如果它命名了宏,它将被扩展。这符合标准第 2.5 条,其中标识符 is a 预处理器令牌,以及 2.2,其中宏扩展作为第 4 阶段的一部分,然后预处理器标记被仅替换为语言语法的标记,这发生在第 7 阶段。

他还提到,自委员会波特兰会议以来 http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1473, 你可以说operator""_W,这将防止宏观扩张,因为_W不再是一个单一的标识符。 Clang trunk 已经实现了这一点并编译了以下代码片段:

#define _W _x

int operator""_W(unsigned long long){ return 42; }

int main(){
  int i = 1337_W;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

下划线、名称和文字运算符 的相关文章

随机推荐

  • org.json.JSONArray 无法转换为 JSONObject

    我是新来的JSON我收到以下异常 org json JSONArray cannot be converted to JSONObject在 try 部分本身的第一行 请帮我删除这个 这是我的代码 try JSONObject json n
  • 输入默认图像以防 html 的 src 属性无效?

    有没有办法在 HTML 中呈现默认图像 img 标签 以防万一src属性无效 仅使用 HTML 如果没有 您解决这个问题的轻量级方法是什么 你要求一个仅 HTML解决方案 p p
  • 引导弹出窗口未显示在所有元素的顶部

    我正在开发一个 bootstrap 网站 从 2 0 更新到 bootstrap 2 2 后 除了弹出窗口之外 一切正常 弹出窗口仍然显示良好 但它们不会显示在所有其他元素之上 div this sits on top of the pop
  • 在 GraphQL 中处理 Mongoose 填充的字段

    我如何表示一个可以是简单字段ObjectId字符串还是填充的对象实体 我有一个代表 设备类型 的 Mongoose 架构 如下所示 assetSchema js import as mongoose from mongoose const
  • 创建 png 文件

    我做了一个函数来处理 jpg 和 png 文件 但是在尝试上传 png 文件时出现错误 这是函数 function createImg type src dst width height quality newImage imagecrea
  • C 和 C++ 之间的内存布局兼容性

    我正在建造一个C 使用许多函数的库struct定义在一个C图书馆 为了避免将任何代码移植到 C 我将典型的条件预处理添加到 C 头文件中 例如 my struct h of the C library include
  • Azure 容器注册表保留策略

    我有一个 ACR 它包含适用于我的生产和开发环境的 docker 映像 由于每天都有新的图像被推送 我正在尝试设置保留策略 我的具体用例如下 根据该图像 假设我在 ACR 中有 100 个图像 第 100 个图像由开发环境消耗 然而 生产运
  • C++ 访问向量

    I have std vector其中包含我自己的类 我必须访问它的函数和空隙 class A private int var vector
  • 在 Electron 渲染器进程中读取 Windows 命令行选项

    我在 Windows 中部署了一个 Electron 应用程序 我正在尝试在 exe 上添加命令行选项 C Program Files MyApp exe 调试 如何读取我的应用程序内的调试标志 我尝试使用 process argv 但调试
  • 有没有办法更改领域数据库中的数据类型?

    正如您所看到的图像 我完全搞乱了数据类型 红色圆圈 有没有办法将数据类型更改为整数 EDIT 我想将数据类型从 String 更改为 Int 并且我有现有数据 因此我无法从新领域开始而只更改 var 类型 class Item Object
  • Q_DECLARE_METATYPE 是 boost::multi_array

    我正在尝试使用 Qt 的信号和槽机制传递表示为 boost multi array 的多维数组 我尝试使用以下代码声明元类型 Q DECLARE METATYPE boost multi array
  • MVC 4 SIMpleMembership 与 LDAP

    我想尝试使用 simpleMembership 但将其连接到我们的 LDAP 我在网上没有看到任何关于这样做的内容 只使用 SQL 有谁知道这是否可能并能引导我走向正确的方向 我认为您需要创建一个继承自 ExtendedMembership
  • 结构 - 访问结构元素,不带 .和->

    我需要访问嵌套结构中的一些元素而不使用 and gt 我需要打印出以下值keyValue and alternateKeyValue从测试笔记本电脑定义中不使用 or gt 运算符直接引用 qwerty 结构或其成员 这是结构 typede
  • 如果在接口中声明方法时将注释与方法相关联,我们是否可以强制实现类中存在注释?

    这是关于 Java 中注释的使用 我在接口中声明方法时将注释与方法相关联 在实现时 如何确保该注释与 Override注释一起携带 如果没有 它应该抛出编译错误 Thanks 您不能在编译器中强制执行此操作 不 当在给定类上查找注释时 工具
  • 在 RazorEngine 中使用内部属性

    我们的领域模型属性都是 内部 的 以保护我们所采用的 BDD 方法 我真的很喜欢把一切都内部化 最近 我试图让 RazorEngine 使用这些具有内部成员的域模型之一来处理模板 当它编译时 我收到错误 Attendee FirstName
  • 函数参数类型取决于其他参数的类型

    我正在尝试编写一个具有以下类型签名的函数 范围a是任一类型string or undefined 范围b is a string if a也是一个string 否则它是一个number 到目前为止我的方法如下 function myFunc
  • 对于 .net 开发人员来说,进入移动开发的学习曲线是怎样的?

    对于 net 开发人员来说 进入移动开发的学习曲线是怎样的 有多少种不同的操作系统运行 net windows mobile 和 windows ce 一样吗 学习曲线 我不想说 这取决于 但确实如此 并且取决于几个因素 您的 NET 开发
  • 如何在android中动态添加项目到微调器?

    如何在android中动态添加项目到微调器 Spinner spinner Spinner findViewById R id mySpinner ArrayAdapter
  • 将十六进制字符串转换为十进制整数

    我正在编写一个 Rust 程序 用于读取 I2C 总线并保存数据 当我读取 I2C 总线时 我得到如下十六进制值0x11 0x22 etc 现在 我只能将其作为字符串处理并按原样保存 有没有办法可以将其解析为整数 有没有内置的功能 在大多数
  • 下划线、名称和文字运算符

    我关于名称中下划线的问题得到了部分回答here https stackoverflow com q 12721584 1275653但要么答案不完整 要么我不完全理解 教派 C 11 标准的 2 14 8 7 声明了这一点文字运算符举个例子