引用是否有存储位置?

Does a reference have a storage location?

引用是否有存储位置,或者它只是另一个位置的别名?这是否因 C++ 版本而异,还是与所有 C++ 版本一致?如果一个引用有一个存储位置,那么它是否只允许像类型这样的指针上的值语义?

当您这样使用参考时,参考如何工作:

struct aStruct{
   int aVariable;
   aClass& aReferencetoaClass;
};

占用space还是别名?

latest C++20 spec(§ 9.2.3.3) and at least since the C++ 2005 draft spec状态:

It is unspecified whether or not a reference requires storage

实际实施是在 case-by-case 的基础上进行的。显然,如果 class 有一个成员变量,它是一个需要存储在某处的引用。但是正如您所说,编译器在何时仅将引用用作别名时有余地。

大多数编译器,对于任何至少达到 C++17 的 C++ 标准,都会有效地将引用实现为指针,除非进行优化。

特别是,在struct内部,它将占用指针的大小(加上alignment/padding等)。

因此,这适用于大多数环境:

struct S {
    char & a;
};

static_assert(sizeof(S) == sizeof(void *));