我已经阅读了有关C ++命名规则的文档,它们似乎是可用的名称。
但是,实际上,当我尝试使用iter
,yes
,no
,out
,i
这样的名称创建变量/枚举时,Error
等,Visual Studio会奇怪地使用 italic 字体。
我只能猜测它们是为特殊事物保留的,如果我使用这些名称,IDE(例如重构/重命名过程)可能会很奇怪。
在实践中使用这些名称是否安全?我太恐慌了吗?
抱歉,如果是新手或不合适的问题。
我怀疑这几周但是太害怕了。
答案 0 :(得分:4)
这些名称是有效的,不会造成任何“伤害”,标准只说:
每个包含双下划线(_ _)的名称或以下划线后跟大写字母(2.11)开头的名称保留给 任何用途的实施。
以下划线开头的每个名称都保留给实现,以用作全局命名空间中的名称。
这意味着您的所有名字都可以在用户代码中使用。 Visual Studio可能只有这些名称,因为i
和iter
通常用于循环。
答案 1 :(得分:1)
这些名称并未在标准C ++中保留,正如Rick Astley所解释的那样。实现可以选择接受其他保留字以提供语言扩展,例如C ++ / CLI中的ref class
。在某些情况下,例如ref class
,其中ref
是上下文关键字,这些扩展只会在扩展语言范围内构建格式错误的程序。在其他情况下,一个格式良好的程序可能会改变其含义或变得格格不入。在前一种情况下,只要它发出所有强制诊断,实现仍然符合C ++标准;在后一种情况下,它当然不符合。
将后一种扩展可选视为良好做法,例如使用命令行选项,以便实现仍然具有完全符合标准的模式。我的直接猜测是VC ++实际上允许您编写包含yes
,no
,i
,iter
的格式良好的程序,这些程序将按照标准的要求运行(尽管存在实施错误。)