C ++变量的定义,基本/ 6

时间:2019-05-12 00:49:48

标签: c++ language-lawyer

[basic] 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必须说:

  

如果变量是默认初始化且[...]

,则该变量被称为具有空虚初始化

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

所以我的问题是:

变量是否只是一种语法构造,旨在将声明中引入的对象和引用归为一个术语?变量本身是对象还是引用?

1 个答案:

答案 0 :(得分:4)

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

Basic / 6告诉我们变量名denotes是该变量声明的对象/引用。应该以通俗的英语阅读:通过变量声明创建的对象/引用具有变量名。相反,变量命名通过变量声明创建的对象/引用。

所以当标准说:

  

如果变量是默认初始化的,那么该变量被称为具有空虚的初始化。

这意味着:

  

[[由变量声明引入的引用/对象]被称为具有空虚的初始化,如果它是默认初始化的......