【发布时间】:2011-10-30 21:23:55
【问题描述】:
什么时候在 C++ 中将“标识符”称为“名称”?我主要读到过度使用术语“名称”而不是示例中的“标识符”:
struct S { int i };
S thing1;
在这种情况下,thing1 是 name 还是 identifer?还是“标识符”和“名称”这两个术语是相似的?在 C 中,在引用对象时是否使用了“名称”一词?
【问题讨论】:
标签: c++ c naming-conventions
什么时候在 C++ 中将“标识符”称为“名称”?我主要读到过度使用术语“名称”而不是示例中的“标识符”:
struct S { int i };
S thing1;
在这种情况下,thing1 是 name 还是 identifer?还是“标识符”和“名称”这两个术语是相似的?在 C 中,在引用对象时是否使用了“名称”一词?
【问题讨论】:
标签: c++ c naming-conventions
在 C++ 中,术语标识符 只是数字、字母和_ 的序列,而不是以数字开头。这样的标识符可以出现在任何地方,并且不必标识任何东西,尽管它的名字(不是双关语)。
name 一词将含义与特定的语法结构相关联。 C++ 规范说,如果以下语法结构之一表示实体(object、class、template 和等等)或一个标签(你可以用goto跳转到)
identifier <...>、operator-function-id <...> 和 literal-operator-id <...>,如 foo <int>)。operator type,如operator int)operator @,如operator +)operator "" identifier,如operator "" _foo)对于这些构造中的每一个,名称与另一个名称相同时的规则定义不同:对于标识符,两个名称相同的序列相同(这只是词法比较)。对于 conversion-function-id 形式的名称,如果使用的类型是相同的类型,则它们是相同的(因此这是语义比较)。
正如您在 literal-operator-id 的示例中看到的那样,非终结符 identifier 可以出现在语法中不是名称的地方。所以不是每个标识符都是一个名字,也不是每个名字都是一个标识符。在 template-id 的例子中,我们有一个嵌套使用的名字。 <...> 之前的构造又是名称,因为它们表示已声明的模板。
【讨论】: