Search code examples
c++referencelanguage-lawyermemory-layoutstorage-duration

Does a reference have a storage location?


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?


Solution

  • 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.