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++的实体列表(3/3 in C++03)包含多个这样的is-a关系。例如,子对象是对象,数组元素是对象,类成员是对象或函数或类型或模板或枚举器。

C++0x 的实体列表对我来说看起来更清晰,它不包含“变量”、“函数实例”(我什至从来不知道那种实体是什么),不再是“子对象”和“数组元素”。相反,它添加了“模板特化”,它可以是函数、类或模板(部分特化)。

1.8 的 C++ 对象模型说

An object can have a name (clause 3).

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

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

相关文章:

javascript - 脚本语言中变量的内存分配是如何完成的?

ruby - 如何将变量的值赋给常量?

javascript - 无法向 Mongoose 函数中的对象添加属性

c++ - 使用函数指针调用函数模板

c++ - 不平衡随机数发生器

c++ - boost::asio,线程池和线程监控

java - 相对于构造函数抛出越界运行时错误

c++ - 显示包含\0 个字符的字符串中的完整字符串

mysql - 在 MySQL 过程中设置变量值的问题

Java { Object a = new Object(); 之间的区别a.getVariable() } 和 { new Object().getVariable() }