c++ - C++ 中的变量到底是什么?

标签 c++ variables object

标准说

A variable is introduced by the declaration of an object. The variable's name denotes the object.

但是这个定义实际上意味着什么?

变量是否为对象命名,即变量只是匿名对象的命名机制吗?或者变量就是名称本身?

或者变量是一个命名对象,因为每个变量也是一个对象?

或者变量只是一个“代理”,其名称将所有操作“委托(delegate)”给真实对象?

更令人困惑的是,许多 C++ 书籍似乎将变量和对象视为同义词。

您对此有何看法?

<小时/>

关于实体,引用自C++0x草案:

An entity is a value, object, reference, function [...]

Every name that denotes an entity is introduced by a declaration.

A variable is introduced by the declaration of an object

从这些陈述中我得出结论:变量是一个名称,因此不能是一个对象。这真的让我很困惑:)

最佳答案

变量是命名对象。以下创建不是变量的对象

new int // create one int object
std::string() // create one string object

下面创建了一个名为“foo”的数组变量和 5 个类型为“int”的未命名(子)对象

int foo[5];

下面的不是C++03中的变量,而是has become a variable在C++0x中(声明的引用是C++0x中的变量,详细信息请参见链接)

extern int &r;
<小时/>

变量是否为对象提供名称,即变量是否只是匿名对象的命名机制?

变量是对象(或分别是引用)。 C++的实体列表(C++03中的3/3)包含多个这样的 is-a关系。例如,子对象是对象,数组元素是对象,类成员是对象或函数或类型或模板或枚举器。

C++0x 的实体列表对我来说看起来更干净一些,它不包含“变量”、“函数实例”(这种实体对我来说到底是什么),不再是“子对象”和“数组元素”。相反,它添加了“模板特化”,即函数、类或模板(部分特化)。

1.8 的 C++ 对象模型表示

An object can have a name (clause 3).

因此,如果您愿意,您可以将语句表述为“对象的名称表示该对象。”。

关于c++ - C++ 中的变量到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59516502/

相关文章:

javascript - 如何在 javascript 函数内部访问外部函数变量?

java - 接口(interface)是抽象的,不能实例化

php - 每个公共(public)属性都必须有访问器方法吗?

c++ - Qt QList 没有按预期工作

c++ - 如何正确写入多维字符数组未知数量的值但固定数量的字符

javascript - 单击某些 div 后如何在 jQuery 函数中更新 'id'?

javascript - TypeError : obj[key]. 包括不是一个函数:在过滤器函数中

c++ - 大型递归字符串操作的段错误

c++ - 如何使用 rangev3 范围实现平面图

c++ - 动态链接 : is it possible to disable automatic loading of non used shared objects?