获取引用的地址是否可以稳健地返回底层别名对象的地址?

问题描述 投票:0回答:1

如果 C++ 程序使用 & 运算符获取通过引用引用的对象的地址,则返回的地址是否可靠地是底层别名对象的地址,或者它是否可能引用该对象的临时实例?

例如:

T a[2];

void g(T& b) {assert ((&b + 1) == &a[1]); }

int main () { g(a[0]); return 0; }

C++ 标准是否保证上述断言始终为真,或者出于优化目的,编译器可能会创建 a[0] 的临时值,让 b 引用该临时值,然后当 g 返回时,将临时值加载回a[0]?

我承认以下声明:引用的地址总是等于源地址吗?但是,没有给出任何引用来支持该断言,我不确定它是否无条件正确。

根据 C++ 标准,未指定引用是否需要存储。另一方面,它还说,获取引用的地址可以得到引用对象的地址。因此,即使编译器选择为引用提供单独的存储而不是内部引用,也可以向程序员保证它们的地址是相同的。

c++ reference pass-by-reference
1个回答
0
投票

“获取引用的地址是否可以稳健地返回底层别名对象的地址?” - 是的!

如果你获取引用的地址,你得到的是被引用对象的地址。

© www.soinside.com 2019 - 2024. All rights reserved.