Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does a reference have a storage location?

Tags:

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?

like image 650
Tarick Welling Avatar asked Jul 01 '19 13:07

Tarick Welling


People also ask

How are reference variables stored in memory?

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.

What does storage location mean?

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.


2 Answers

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.

like image 156
Paul Evans Avatar answered Oct 18 '22 09:10

Paul Evans


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 *)); 
like image 24
Acorn Avatar answered Oct 18 '22 09:10

Acorn