C++ 中的“标识符”何时称为“名称”?我主要读到术语“名称”被过度使用,而不是示例中的“标识符”:
struct S { int i };
S thing1;
在这种情况下,thing1
是名称 还是标识符?还是术语“标识符”和“名称”是类似的?在 C 中,在引用对象时是否使用术语“名称”?
最佳答案
在 C++ 中,标识符 只是一个数字、字母和 _
的序列。 , 不以数字开头。这样的标识符 可以出现在任何地方,并且不必标识 任何东西,尽管它的名字(没有双关语意)。
术语名称 将含义与特定语法结构相关联。 C++ 规范规定,如果以下语法结构之一表示实体(对象、类、模板 和依此类推)或标签(您可以使用 goto
跳转到的位置)
- 标识符
- 模板 ID(
identifier <...>
、operator-function-id <...>
和literal-operator-id <...>
,如foo <int>
)。 - 转换函数 ID(
operator type
,如operator int
) - operator-function-id(
operator @
,如operator +
) - literal-operator-id(
operator "" identifier
,如operator "" _foo
)
对于这些结构中的每一个,名称与另一个名称相同时的规则定义不同:对于标识符,两个名称相同或序列相同(这只是词法比较)。对于 conversion-function-id 形式的名称,如果使用的类型是同一类型,则它们是相同的(因此这是语义比较)。
正如您在 literal-operator-id 示例中看到的,非终结符 identifier 可以出现在语法中不是名称的地方。所以不是每个标识符都是名字,也不是每个名字都是标识符。在 template-id 的示例中,我们嵌套使用了名称。 <...>
之前的构造分别是名称,因为它们表示已声明的模板。
关于c++ - 什么时候 'identifier' 在 C++ 中是 'name'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7947925/