Does a reference have a storage location or is it just an alias for another location? Does this differ by C++ revision or is it consistent with all versions of C++? And if a reference has a storage location, does it then just allow value semantics on a pointer like type?
How would a reference work when you use it as such:
struct aStruct{ int aVariable; aClass& aReferencetoaClass; };
Does it take up space or is it an alias?
Reference Type variables are stored in a different area of memory called the heap. This means that when a reference type variable is no longer used, it can be marked for garbage collection. Examples of reference types are Classes, Objects, Arrays, Indexers, Interfaces etc.
The term storage location describes the smallest spatial unit that exists in a warehouse. By definition, it describes the exact place in the warehouse where goods are located or can be stored.
The latest C++20 spec(§ 9.2.3.3) and at least since the C++ 2005 draft spec state:
It is unspecified whether or not a reference requires storage
The actual implementation is on a case-by-case basis. Obviously if a class has a single member variable that is a reference that will need to be stored somewhere. But the compiler has leeway when to use a reference solely as an alias, as you put it.
Most compilers, for any C++ standard up to C++17 at least, will effectively implement a reference as a pointer, unless optimized out.
In particular, inside an struct
, it will take take up the size of a pointer (plus alignment/padding etc.).
Therefore, this will hold in most environments:
struct S { char & a; }; static_assert(sizeof(S) == sizeof(void *));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With