在 C++17 标准中声明(强调我的):
“变量是由非静态数据成员或对象的引用声明引入的。变量的名称(如果有)表示引用或对象。”
来源:ISO/IEC 14882:2017 (C++17), §6/6 - “基本概念”
为什么是“如果有”?变量可以在 C++ 中省略名称吗?
如果我查看 cppreference:
“在 C++ 中,变量实际上只是为程序使用而保留的一点内存。您使用变量名来引用它,因此您无需担心它在内存中的位置(尽管您可以找到出它的内存地址,甚至可以指定它的位置,如果你愿意的话)。”
或者维基百科(我知道它不是最好的来源,但仍然很常见):
“在计算机编程中,变量或标量是一个存储地址(由内存地址标识)与相关的符号名配对,其中包含一些已知或未知的信息量,称为值。变量名是通常的方法根据上下文,除了引用变量本身之外,还引用存储的值。”
来源:https : //en.wikipedia.org/wiki/Variable_(computer_science)
这表示变量应始终提供与其关联的名称,无论引用的对象/值是否被它访问。
变量在 C++ 中是否可能没有名称?
如果是,如何以及在哪里(如果可能有多种情况)?
或者,如果我误解了某些东西,那么“如果有的话”如何解释?
有关的:
标准说
甲变量由对象的声明引入.变量的名称表示对象.
但这个定义究竟意味着什么呢?
变量是否为对象赋予名称,即变量只是其他匿名对象的命名机制?或者是名称本身的变量?
或者,变量是一个命名对象,因为每个变量也是一个对象?
或者是一个变量只是一个"代理",其名称将所有操作"委托"给真实对象?
为了进一步混淆,许多C++书籍似乎将变量和对象视为同义词.
你对此有什么看法?
关于实体,引用C++ 0x草案:
实体是价值,对象,参考,功能[...]
表示实体的每个名称都由声明引入.
变量由对象的声明引入
从这些陈述中我得出结论,变量是名称,因此不能是对象.这真让我感到困惑:)
该标准规定了这一点
实体是值,对象,引用,函数,枚举器,类型,类成员,模板,模板特化,命名空间,参数包或此.
这意味着"变量"不是实体.
但标准中进一步说:
表示实体的每个名称都由声明引入.表示标签的每个名称都由goto语句(6.6.4)或带标签的语句(6.1)引入.
和
通过声明除非静态数据成员或对象之外的引用引入变量.变量的名称表示引用或对象.
我从这两个引号中假设变量是一个名称.
这是因为变量是通过引用声明和表示声明引入的实体的每个名称引入的.但变量的名字是什么意思?根据定义,变量也是名称.