首页 > 解决方案 > C++ 变量的定义,Basic/6 节

问题描述

[基本] p6指出:

变量是由非静态数据成员或对象以外的引用的声明引入的。变量的名称(如果有)表示引用或对象。

int a = 0; // declaration of an object, this introduces the variable x, and an object is created
int{0}; // not a declaration of a variable, this does not introduce a variable, but an object is created

这是否意味着变量是对象或引用(不是非静态成员)?在整个标准中,它们被称为好像它们具有对象/引用的属性,但正式定义似乎没有说明这一点。让我感到困惑的是,变量名称是指对象或引用,而不是变量本身。

例如,这是[basic.life] p1必须说的:

如果一个变量是默认初始化的并且 [...]

这暗示了与对象和引用具有相同属性的变量,因为它们可以被初始化。

所以我的问题是:

变量是否只是一种句法结构,旨在将声明引入的对象和引用组合成一个术语?变量本身是对象还是引用?

标签: c++language-lawyer

解决方案


正如在Basic/3中明确指出的那样,变量不是“实体”。对象和引用是实体,但不是变量。因此,您可以将变量视为纯粹的语法结构,而不是一流的 C++ 事物。

Basic/6 告诉我们变量名表示该变量声明的对象/引用。这应该被理解为简单的英语:通过变量声明创建的对象/引用具有变量名称。相反,变量命名通过变量声明创建的对象/引用。

所以当标准说:

如果一个变量是默认初始化的并且...

它的意思是:

如果一个[由变量声明引入的引用/对象]被默认初始化并且...


推荐阅读