Datum, Value, Value Type, Object and Object Type in C++ : <p>First of all, let me say that I am sorry to ask couple of different things on a single SO question but they are all related and I don't know how to separate them. </p>

<p>In the book, <code>From Mathematics to Generic Programming</code>, Alexander Stepanov makes following definitions. </p>

<p><strong>Defnition 10.1.</strong> A datum is a sequence of bits.</p>

<p>01000001 is an example of a datum.</p>

<p><strong>Defnition 10.2.</strong> A value is a datum together with its interpretation.</p>

<p>So 65 and character 'A' are two different values that can share the same datum if we are to implement them as such in memory.</p>

<p><strong>Defnition 10.3.</strong> A value type is a set of values sharing a common interpretation.</p>

<p>Up until this point, things are not really about programming. These definitions are more of a philosophical nature. For example, Leibniz could have created a taxonomy of all knowledge using something similar.</p>

<p>Things get related to computers here.</p>

<p><strong>Defnition 10.4.</strong> An object is a collection of bits in memory that contain a value of a given value type.</p>

<p><strong>Defnition 10.5.</strong> An object type is a uniform method of storing and retrieving
values of a given value type from a particular object when given its address.</p>

<p>So an object is a way to represent things in memory and object type is a way to work with these representation in a programming language. Compiler tracks the relation between object and corresponding object type so I can express abstractions in my program. In light of these definitions, here are couple of questions.</p>

<p>Take a look at following code.</p>

<pre><code>int b = 5;
int&amp; a = b;
std::cout &lt;&lt; a + b;
</code></pre>

<p>I can get that <code>int</code> is an object type. But;</p>

<ol>
<li><p>What is <code>a</code>, <code>b</code>? Are they variables, identifiers, objects? From the definitions, they don't seem like objects. Do they have object types? If so, they should be an object. Do objects have values?</p></li>
<li><p>What is the type of <code>a</code>, if these things indeed have types? To this day I thought its type is <code>reference to an int</code> but are references also object types? If so, <code>int</code>and <code>int &amp;</code> seems like completely same object types. </p></li>
<li><p>For an rvalue, we know it has a related object in memory so they have related value types, value and data as well. But do rvalues have object types as well? I am asking these because they are region of storage in the sense of being an object wrt. C++ standard but they are not addressable so it seems like they fail to be objects in the Stepanovian sense.</p></li>
</ol>

<p>You see, I have a lot of confusion to be cleared up.</p>
