Does a reference have a storage location?

一个人想着一个人 提交于 2019-12-18 18:40:56

问题


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?


回答1:


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.




回答2:


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 *));


来源:https://stackoverflow.com/questions/56836507/does-a-reference-have-a-storage-location

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!