c++ - 什么时候 'identifier' 在 C++ 中是 'name'?

标签 c++ c naming-conventions

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/

相关文章:

c - 如何创建一个 char 数组变量,该变量在每次运行代码时都会更改其值?

c - Makefile 依赖项

java - 分组测试的单元测试名称约定

c# - 重命名具有相同用途的多个参数的好方法是什么?

c++ - RapidJSON : Differences between building using Document or Writer

c++ - 将 std::string_view 与需要以空字符结尾的字符串的 api 一起使用

C:数组声明期间的内存状态

c++ - 如何组织具有基于 Qt 的依赖关系的 Qt DLL

c++ - 当显示为对话框时,派生的小部件不以父级为中心

.net - n-Tiered .NET 应用程序本地化指南