在标准C++术语中,结构体/类实例的名称属于变量还是标识符?
结构体/类实例的名称在C++标准术语中的定位
核心术语的标准定义
- 变量:在C++标准中,变量指拥有自动、静态、线程局部或动态存储期的对象,或是引用。结构体、类的实例本质上属于对象范畴,只要符合变量的存储期规则,就属于变量。
- 标识符:是用于标记程序中各类实体(变量、函数、类、命名空间等)的名称,变量名只是标识符的一个子集。
问题解答
如果结构体/类实例是通过变量声明定义的(比如MyClass obj;),那么:
- 这个实例的名称(比如
obj)所指代的实体是变量——因为它是拥有存储期的类/结构体对象; - 而这个名称本身是标识符——标识符是所有实体名称的统称,变量名只是其中一类。
举个直观的代码示例:
struct User { std::string name; int age; }; User alice; // 这里的`alice`是变量,指代存储User实例的内存区域
在这段代码里,alice作为变量,对应着一块存储User实例的内存;而alice这个字符串本身是标识符,用来在代码中引用这个变量。
关键区分点
不要混淆「名称(标识符)」和「名称指代的实体(变量)」:
- 标识符是标签式的名称字符串,用于指代实体;
- 变量是拥有存储的实体本身,它的名称属于标识符的一种。
简言之,结构体/类实例的名称(对应合法的变量声明),既可以说它的名称是标识符,也可以说它指代的实体是变量——两者描述的是不同层面的概念,并非互斥选项。
内容的提问来源于stack exchange,提问作者Crackie
相关产品推荐
相关产品推荐

