引用是否具有存储位置,或者仅仅是另一个位置的别名?这是否因C ++版本不同而不同,或者是否与C ++的所有版本都一致?而且,如果引用具有存储位置,那么它是否只允许在类型之类的指针上使用值语义?
像这样使用参考如何工作?
struct aStruct{
int aVariable;
aClass& aReferencetoaClass;
};
它占用空间还是别名?
答案 0 :(得分:16)
latest C++20 spec(第9.2.3.3节),至少从C++ 2005 draft spec状态开始:
尚不确定引用是否需要存储
实际的实施情况视具体情况而定。显然,如果类具有单个成员变量,则该成员变量是需要存储在某处的引用。但是,正如您所说的,编译器还有余地何时仅将引用用作别名。
答案 1 :(得分:10)
大多数编译器(至少对于C ++ 17之前的任何C ++标准)都将有效地实现引用作为指针,除非进行了优化。
尤其是在struct
内部,它将占用指针的大小(加上对齐/填充等)。
因此,这在大多数环境中都适用:
struct S {
char & a;
};
static_assert(sizeof(S) == sizeof(void *));