Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C+;中的变量究竟是什么+;?_C++_Variables_Object - Fatal编程技术网

C++ C+;中的变量究竟是什么+;?

C++ C+;中的变量究竟是什么+;?,c++,variables,object,C++,Variables,Object,标准上说 变量是通过对象的声明引入的。变量的名称表示对象 但这个定义究竟意味着什么 变量是否为对象命名,即变量是否只是匿名对象的命名机制?或者变量本身就是名称 或者一个变量是一个命名对象,因为每个变量都是一个对象 或者一个变量只是一个“代理”,它的名称将所有操作“委托”给真实对象 混淆了更多的东西,许多C++书籍似乎把变量和对象当作同义词来对待。 你对此有何看法 关于实体,引用C++0x草稿: 实体是值、对象、引用、函数[…] 每个表示实体的名称都由一个声明引入 变量是通过对象的声明引入的 从

标准上说

变量是通过对象的声明引入的。变量的名称表示对象

但这个定义究竟意味着什么

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

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

或者一个变量只是一个“代理”,它的名称将所有操作“委托”给真实对象

混淆了更多的东西,许多C++书籍似乎把变量和对象当作同义词来对待。 你对此有何看法


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

实体是值、对象、引用、函数[…]

每个表示实体的名称都由一个声明引入

变量是通过对象的声明引入的


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

变量是你给对象起的名字,所以是的,对象大体上是匿名的。

变量是命名对象。以下步骤将创建非变量的对象

new int // create one int object
std::string() // create one string object
下面创建一个名为“foo”的数组变量和5个类型为“int”的未命名(子)对象

以下不是C++03中的变量,而是C++0x中的变量(声明的引用是C++0x中的变量,有关详细信息,请参阅链接)


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

变量是对象(或分别是引用)。C++中的实体列表(C++中的代码> 3/3)/代码>包含多种关系。例如,子对象是对象,数组元素是对象,类成员是对象、函数、类型、模板或枚举器

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

< > C++对象模型在<代码> 1.8 /代码>表示< /P> 对象可以有名称(第3条)


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

我认为这个定义非常清楚

变量由声明引入并表示对象。谁引入变量?当然是你,因此使用它的是你

变量对开发人员来说只是一种方便。它是大多数编程语言的一个基本方面,而不仅仅是C++。变量mearly为占用存储空间的可用实体提供一个符号名,以便在源代码中的将来引用和使用它

例如,如果在方法中声明变量,则如下所示:

int x = 5;
这将由编译器减少到堆栈指针的某个偏移量,例如SP+0x003

稍后,你可以说:

x = 52;
在这种情况下,堆栈内存SP+0x003区域将包含描述数字52的字节

您将变量声明为特定类型,以便编译器可以计算出数据在内存中所占的空间。
如果没有变量,您将不得不自己管理所有信息的排列,您可能会使用汇编或更低版本进行编码。

变量实际上是内存中某个对象的名称,因此在编译之前,当编译发生时,对象在这方面是匿名类型,在语法和解析阶段跟踪变量,然后当链接器启动时,该变量将被分配一个内存地址,尽管在运行时,该内存地址将被正确地设置在某个地方,以考虑动态链接或静态链接。因此,该变量可以很容易地被分配给的内存地址引用

事实上,简而言之,变量是为了帮助程序员计算出执行的连接点,在这里,变量被机器代码引用

你对此有何看法


变量是堆栈上或代码段中的一块内存,或寄存器中的一个值(如果变量的大小足够小,但通常它仍然是内存中的值,而寄存器保存临时结果),为方便程序员,提供了该名称。编译后变量的名称不存在(这里我们不讨论宏技巧)。对变量的任何访问都被解析为内存访问,所以从技术上讲,变量是相应数据块的地址,而该地址不存储在任何地方。想想汇编语言中的变量声明——变量“kinda”存在,但它仍然只是数据块的偏移量。

变量是对象的名称。您可以通过这个命名实体访问对象。

正如我所了解的,变量只是一个具有类型和名称的实体

什么是变量

变量是绑定到存储在系统内存中的值(命令式语言)或可计算的表达式(函数式语言)的标识符

为什么我们需要变量

  • 提供存储块的名称,以便在计算机程序的生命周期内临时存储数据
  • 也用于编程,将信息从程序的一部分传输到另一部分(例如:参数、全局变量)

    • 以下是C++17标准的定义:

      变量是通过另一个引用的声明引入的 而不是对象的非静态数据成员或。变量的名称,如果
      int x = 5;
      
      x = 52;
      
      int foo = 42;