值和对象之间有什么区别?

时间:2017-09-18 20:43:16

标签: c++

我正在阅读有关value types对象的文章被提及,好像它们意味着不同的东西,所以我认为它们确实存在。然后我试着做一些研究,但没有运气。我知道值是一个无法进一步求值的表达式,但它不是一个对象只是值的“容器”?另外,根据我对表达式的术语理解,说对象是否包含表达式(因为值是表达式)会不会很奇怪?

我不会开始做太多的猜测,因为这可能会让一切变得复杂,并且可能会将焦点重定向远离值和对象之间的差异。

编辑:对于那些标记为“过于宽泛”的人来说,如果不是更广泛What are rvalues, lvalues, xvalues, glvalues, and prvalues,那么问题就不是以下问题吗?此外,SO上有很多其他“区别”问题,其中许多问题与我所链接的问题一样广泛。那么为什么这个特殊问题无效?

2 个答案:

答案 0 :(得分:4)

是一个比对象更抽象的概念。

与评论中提到的那些一样,值和对象之间的差异/关系类似于水和杯子之间的差异/关系。

你需要一个容器,在这种情况下是一个杯子,用来盛水,否则它会泄漏。同样,您需要一个对象来保存值,以便它们不会很快丢失或被覆盖。

对象始终具有其专用存储区域(在内存中),而值的生命周期可以与单个指令(movl %eax, $1)一样少。

答案 1 :(得分:2)

这个术语在计算机科学的不同部分意味着略有不同(正如您可以从其维基页面上的讨论中看到的那样)。我在C ++和"值类型"的背景​​下构建了这个答案。在问题中提到 - 这里的权威性参考将是Alexander Stepanov"编程元素"以及John Lakos关于价值语义类型的讲座。

值是一个集合的成员,它独立于其表示而存在。

整数集的成员可以被拒绝为"十五"," 15"," 0xf","十五&# 34;,或"ⅩⅤ"是一样的,普遍的,有价值的。我可以在两张纸上写下来,在两张纸上加一张,两张纸都有相同精确值16的表示,即使我使用不同的符号(这就是它的含义"价值语义")

对象是计算机存储器的一个区域,由位(二进制数字)组成,并且具有类型。该类型所做的事情之一是确定这些位的状态与我们将对象视为的值之间的映射。

在现有计算机上,由位00001111组成的int8_t类型的对象被认为代表整数值"十五"。