C ++中的基准,值,值类型,对象和对象类型

时间:2018-05-24 15:55:41

标签: c++

首先,我要说的是,我很遗憾在一个问题上提出几个不同的问题,但它们都是相关的,我不知道如何将它们分开。

在书中,From Mathematics to Generic Programming,亚历山大斯捷潘诺夫做出以下定义。

定义10.1。数据是一系列位。

01000001是基准的一个例子。

定义10.2。值是一个数据及其解释。

所以65和字符'A'是两个不同的值,如果我们要在内存中实现它们,它们可以共享相同的数据。

定义10.3。值类型是一组共享共同解释的值。

到目前为止,事情并非真正与编程有关。这些定义更具有哲学性质。例如,Leibniz可以使用类似的东西创建所有知识的分类。

事情与计算机有关。

定义10.4。对象是内存中包含给定值类型值的位的集合。

定义10.5。对象类型是一种统一的存储和检索方法 给定其地址时特定对象的给定值类型的值。

因此,对象是一种在内存中表示事物的方式,而对象类型是一种在编程语言中使用这些表示的方法。编译器跟踪对象和相应对象类型之间的关系,这样我就可以在程序中表达抽象。根据这些定义,这里有几个问题。

请查看以下代码。

int b = 5;
int& a = b;
std::cout << a + b;

我可以得到int是一种对象类型。但;

  1. 什么是ab?它们是变量,标识符,对象吗?从定义来看,它们看起来不像是对象。他们有对象类型吗?如果是这样,它们应该是一个对象。对象有值吗?

  2. a的类型是什么,如果这些东西确实有类型的话?到目前为止,我认为它的类型是reference to an int但是引用也是对象类型?如果是这样,intint &似乎完全相同的对象类型。

  3. 对于右值,我们知道它在内存中有一个相关对象,因此它们也有相关的值类型,值和数据。但是rvalues也有对象类型吗?我问这些是因为它们是作为对象的意义上的存储区域。 C ++标准,但它们不可寻址,因此它们似乎无法成为Stepanovian意义上的对象。

  4. 你知道,我有很多困惑需要清理。

1 个答案:

答案 0 :(得分:2)

  1. ab是标识符,但是当标识符引用变量时,人们通常会将它们称为变量。

  2. (标识符标识的变量)a的类型为int &,也称为对int的引用。 C和C ++中的技巧是你看一下声明,看看你想知道它的类型,从整个声明中删除它,你留下的是类型。因此&aa所指的)的类型为int

    参考也是类型。但是对int&#34;的引用?与&#34; int&#34;的类型不同。您可以将引用看作是自动为您解除引用的指针类型,因此int &b = a; std::cout << b;或多或少等于int *b = &a; std::cout << *b;。在这两种情况下,变量b实际上保持指针值等于变量a的地址。

  3. rvalue不必在内存中有相关对象。例如,在int b = 5中,5是一个右值。但是,这5不一定在记忆中。在声明之后存在5的内存的唯一原因是因为变量b被初始化为rvalue 5。但是,如果我执行int b = 1.234,则值1.234不会在内存中,只会在值1中。但rvalues确实有类型。例如,1.234double