标准规定
实体是值,对象,引用,函数,枚举器,类型, 类成员,模板,模板特化,命名空间,参数 包装,或者这个。
这意味着"变量" 不是实体。
但标准中进一步说:
表示实体的每个名称都由声明引入。 每个表示标签的名称都是由goto引入的 声明(6.6.4)或标签声明(6.1)。
和
变量是由引用声明引入的 非静态数据成员或对象。变量的名称表示 参考或对象。
我从这两个引号中假设变量是一个名称。
这是因为变量是通过引用声明和表示声明引入的实体的每个名称引入的。 但变量的名称是什么意思? 变量也是一个名称。
答案 0 :(得分:2)
我从这两个引号中假设变量是一个名称。
不,从您提供的引号中,变量是具有名称的对象或引用。
这是因为变量是通过引用声明和表示声明引入的实体的每个名称引入的。
声明引入了变量(对象或引用)及其名称。这并不意味着该变量就是名称,只是两者都是由声明引入的。
答案 1 :(得分:1)
术语变量的定义在这方面有点含糊不清,但通过查看c ++标准中术语变量的各种用法,看起来变量是一种特殊的实体。它既可以是对象,也可以是引用。但是,并非所有对象或引用都是变量,只有按照 [basic] / 6 中描述的方式引入的那些:
变量是由引用声明引入的 非静态数据成员或对象。变量的名称,如果有的话, 表示参考或对象。
请注意,某些变量是未命名的,例如下例中函数f的参数:
void f(int) {}
int main() {}
答案 2 :(得分:0)
我能想到的最简单的定义是: 变量是名称,地址和类型的三重奏(通常意味着大小)。
最初它意味着保持可变值,但某些语言允许此值保持不变(只写一次)。
答案 3 :(得分:0)
正如你所说,一个变量是"一个东西"的名称。那个"一个东西"是引用(到另一个对象)或对象。请注意,此处的对象不会推断"类的实例",因此对象可以是char,int的数组或指向void的指针。
该名称由编译器持有,当生成代码时,某个空间的某处被分配给变量[1],寄存器或堆栈(局部变量)或数据空间" (static
或全局变量)。这给变量一个位置,一个地址(注意寄存器没有地址)。
[1]如果编译器发现变量未被使用[或者有时被替换,例如当循环优化从一种形式的循环改变为另一种形式时],也可以消除变量