'identifier'什么时候是C++'name'?

When is an 'identifier' a 'name' in C++?

本文关键字:name C++ 什么时候 identifier      更新时间:2023-10-16

在c++中什么时候'标识符'称为'名称' ?我主要读到术语"名称"被过度使用,而不是"标识符",如在示例中:

struct S { int i };
S thing1;

在这种情况下,thing1名称还是标识符?或者术语"标识符"answers"名称"是类似的?在C语言中,当提到一个对象时,是否使用术语"名称"?

在c++中,术语标识符只是数字、字母和_的序列,而不是以数字开头。这样的标识符可以出现在任何地方,并且不需要标识任何东西,尽管它的名字(没有双关语的意思)。

术语名称将一个意义与某个语法结构联系起来。c++规范规定,如果下列语法结构之一表示实体(对象模板等等)或标签(您可以使用goto跳转到其中)

,则该语法结构之一就是名称
    <
  • 标识符/em>
  • template-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的示例中可以看到,非终结符标识符可以出现在语法中不是名称的地方。所以不是每个标识符都是名称,也不是每个名称都是标识符。在template-id的例子中,我们使用了嵌套的名称。<...>前面的结构又分别是名称,因为它们表示声明的模板。