cpx*_*cpx 9 c c++ naming-conventions
何时在C++中称为"名称"的"标识符"?我主要读到"名称"一词过于使用而不是"标识符",例如:
struct S { int i };
S thing1;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,是thing1
一个名称或IDENTIFER?或者术语"标识符"和"名称"是类似的吗?在C中,在引用对象时是否使用术语"名称"?
Joh*_*itb 15
在C++中,术语标识符只是一个数字,字母序列_
,而不是以数字开头.这样的标识符可以出现在任何地方,并且不必标识任何内容,尽管它的名称(没有双关语).
术语名称将含义与某个语法结构相关联.C++的规范说以下语法的一个构造是一个名字,如果它是指一个实体(一个对象,一个类,一个模板等)或一个标签(在这里你可以跳转到同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的示例中所看到的,非终端标识符可以出现在语法中不是名称的地方.因此,并非每个标识符都是名称,并非每个名称都是标识符.在template-id的示例中,我们使用名称的嵌套使用.之前的构造<...>
分别是名称,因为它们表示声明的模板.