C++11 是否允许在标识符中使用美元符号?

2024-05-22

C++03 中的标识符中允许使用美元符号吗? https://stackoverflow.com/questions/936744/are-dollar-signs-allowed-in-identifiers-in-c03涵盖了 C++03 中不允许在标识符中使用美元符号。 GCC 将其提供为C扩展 https://gcc.gnu.org/onlinedocs/gcc/Dollar-Signs.html#Dollar-Signs并在 C++03 模式下正确给出诊断。然而,在 C++11 中,int $ = 0将在没有警告的情况下编译。

This answer https://stackoverflow.com/a/16055409/3920237原因是$可能被允许,因为实现定义的标识符不需要诊断:

这里的答案是"Maybe": 根据§2.11, 身份标识 可能包括digits and 非数字标识符,从一开始 后者。非数字标识符是平常的a-z, A-Z和 下划线,此外,从 C++11 开始,它们还包括通用字符名称 (e.g. \uBEAF, \UC0FFEE32), 和其他实现定义的字符。所以它是实现定义的 如果使用$允许在标识符中使用。 VC10及以上版本支持, 也许早期版本也是如此。它甚至支持像这样的标识符こんばんわ.

But:我不会使用它们。使标识符尽可能可读和可移植。$是实现定义的,因此不是 便携的。

这种语言也出现在 C++03 标准中,所以我认为这不是一个非常有说服力的论点。

§2.10/2

另外,一些标识符是保留给C++使用的 实现和标准库(17.6.4.3.2)并且不应 以其他方式使用;无需诊断。

标准允许哪些变化$用作标识符名称?


这是实现定义的行为,$不包含在标识符的语法中。标识符名称的规则C++11 are:

  1. 不能以数字开头
  2. 可以由字母、数字、下划线、通用字符名称等组成实施定义人物
  3. 不能是一个keyword http://en.cppreference.com/w/cpp/keyword

实现定义的字符被允许并且许多编译器支持作为扩展,包括gcc http://gcc.gnu.org/onlinedocs/gcc/Dollar-Signs.html#Dollar-Signs, clang, 视觉工作室 http://msdn.microsoft.com/en-us/library/565w213d.aspx并如a中所述comment https://stackoverflow.com/questions/26301737/does-c11-allow-dollar-signs-in-identifiers#comment41275143_26301737显然DEV C++ 编译器 https://www.cs.auckland.ac.nz/references/c/cplusplus/cxx570_ug_003.html#index_x_142.

语法包含在C++ 标准草案 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3485.pdf部分2.11 标识符,我添加了以下附加注释:<-:

identifier:
  identifier-nondigit            <- Can only start with a non-digit
  identifier identifier-nondigit <- Next two rules allows for subsequent 
  identifier digit               <-  characters to be those outlined in 2 above
identifier-nondigit:
  nondigit                       <- a-z, A-Z and _ 
  universal-character-name
  other implementation-defined characters
[...]

如果我们使用以下命令编译这段代码clang-pedantic-errors标记它不会编译:

int $ = 0

并产生以下错误:

error: '$' in identifier [-Werror,-Wdollar-in-identifier-extension]
int $ = 0;
    ^
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++11 是否允许在标识符中使用美元符号? 的相关文章

  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri

随机推荐

  • 用教义 2 DBAL 连接子查询

    我正在重构 Zend 框架2应用程序使用学说 2 5 DBAL 而不是 Zend DB ZF1 我有以下 Zend Db 查询 subSelect db gt select gt from user survey status entrie
  • 如何在 Angular 中的 chrome 浏览器中捕获控制台日志

    这是我为日志 错误 警告和调试编写的代码片段 如何查看浏览器中存储的值 let defaultLog console log bind console let defaultError console error bind console
  • C++ 模板似乎破坏了访问说明符

    由于明显的原因 以下代码无法编译 即 Foo 正在尝试访问 Bar 的私有成员 但是 如果您取消注释 注释标记的行 使 Foo 成为模板 它会编译并输出 42 我在这里缺少什么 为什么这有效 在我看来不应该 感谢您的帮助 include
  • 如何以编程方式向 DRF 3 中的 PrimaryKeyRelatedField 提供“queryset”

    为了有一个非只读PrimaryKeyRelatedField 您需要提供包含有效选项的查询集 如何根据当前请求 用户 正确填充该查询集 关键是子类化PrimaryKeyRelatedField并超载get queryset方法 使用请求上下
  • R 中的卡方拟合优度检验

    我有一个观察值向量 还有一个用模型计算的值向量 actual lt c 1411 439 214 100 62 38 29 64 expected lt c 1425 3 399 5 201 6 116 9 72 2 46 3 30 4 6
  • 连接两个表而不返回不需要的行

    我的表结构如下所示 tbl users tbl issues userid real name issueid assignedid creatorid 1 test 1 1 1 1 2 test 2 2 1
  • C++ GUI 桌面 Windows 应用程序的测试自动化工具/库/框架

    不幸的是 我有一个在 Windows 上运行的 GUI 桌面应用程序 并使用 Borland C 编译器进行编译 我知道这是一项非常古老的技术 但这就是生活 我工作的公司有很多免费的 QTP 许可证 但说实话 我不喜欢这个工具 我想用一些开
  • 在 Google App Engine 上连接 Mongoose

    我已在 Google App Engine 上成功部署了自定义 Node js 应用程序 但是 我在启动应用程序时遇到问题 因为猫鼬在尝试连接时超时 令人沮丧的是 猫鼬在我的本地计算机上以完全相同的参数连接得很好 我的 MongoDb UR
  • “gulp”不被识别为内部或外部命令

    我正在尝试使用Gulp http gulpjs com and Node Js https nodejs org en 流式传输我的生产过程中缩小和连接 CSS JS 文件的过程 这是我所做的 我安装了Node Js https nodej
  • 标记上存在语法错误,需要 AnnotationName - 查询错误

    我收到了令牌语法错误 AnnotationName 预期出现在以下行 query findInBackground new FindCallback
  • 使用 scipy 的solve_bvp 求解 BVP

    我有一个由 3 个微分方程组成的系统 我相信从代码中可以明显看出 具有 3 个边界条件 我设法在 MATLAB 中用一个循环来解决这个问题 一点一点地改变最初的猜测 而不会在程序即将返回错误时终止程序 然而 关于scipy s solve
  • ASP.Net MVC 3 JSON 模型绑定和服务器端模型验证与客户端验证混合

    我一直在使用新的 MVC3 Json 模型绑定 它非常好 目前 我可以将 JSON 发布到控制器并绑定它 模型验证也进展顺利 但如果模型无效怎么办 我想返回 JSON 并让客户端通知用户 就像在 mvc 中执行正常客户端验证的方式一样 有谁
  • C# 从字符串中删除制表符,制表符识别

    我想从字符串中删除制表符 我正在使用这段代码 但它不起作用 string strWithTabs here is a string with a tab tab character char tab u0009 String line st
  • 使用 SciKit-learn 和大型数据集进行文本分类

    首先 我昨天开始学习Python 我正在尝试使用 SciKit 和大型数据集 250 000 条推文 进行文本分类 对于该算法 每条推文都将表示为 4000 x 1 向量 因此这意味着输入为 250 000 行和 4000 列 当我尝试在
  • 使用 C# 查找数据表中的最小值和最大值[重复]

    这个问题在这里已经有答案了 可能的重复 如何选择数据表中列的最小值和最大值 https stackoverflow com questions 2442525 how to select min and max values of a co
  • Windows CE 与嵌入式 Linux [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 现在我确信我们都清楚 Linux 与 Windows 桌面的相对优点 然而 我对嵌入式开发世界的了解却少得多 我主要对行业解决方案感兴
  • 优化大数据读写(C++)

    我正在寻求优化 C 模拟应用程序的读取 写入大量数据 称为 映射 的数据本质上由整数 双精度数 浮点数和单个枚举组成 该地图数据的大部分大小是固定的 但一小部分可能会变化 从几KB到几KB 大小 几个这样的映射 通常是数百万个 在应用程序启
  • 如何使 PowerShell 函数调用超时

    我编写了一个小 powershell 函数 用于对远程服务器执行 Get EventLog 在某些服务器上 这似乎只是挂起并且永远不会超时 我可以使 powershell 函数调用超时吗 我知道如何针对不同的过程 https stackov
  • 如何让 Visual Studio 连接到 Windows 应用商店?

    我尝试在 Visual Studio 2015 中创建应用程序包以上传到 Windows 应用商店 但每次尝试连接到应用商店都会导致错误 An unexpected network error has occurred The app li
  • C++11 是否允许在标识符中使用美元符号?

    C 03 中的标识符中允许使用美元符号吗 https stackoverflow com questions 936744 are dollar signs allowed in identifiers in c03涵盖了 C 03 中不允