获取const lvalue参考的地址是合法的吗?

Is it legal to take the address of a const lvalue reference?

本文关键字:地址 const lvalue 参考 获取      更新时间:2023-10-16
#include <iostream>
int foo()
{
  return 0;
}
int main()
{
  const int& a = foo();
  std::cout << &a << std::endl;
}

在此代码中,a绑定到rvalue。进行地址合法吗?(我的意思是:在法规中,我是造成不确定的行为吗?)

这很好。在C 11中,您甚至可以这样做:

int&& a = foo();
a = 123;

您可以考虑这样的临时工(从概念上讲和一般):

x = func(); // translated as:
auto __temporary = func();
x = __temporary;
__destruct_value_now_and_not_later(__temporary);

除非x是参考类型的定义,

编译器指出,您有目的地指的是临时值,并通过删除早期破坏代码来延长其寿命,使其成为正常变量。

是。在变量a脱离范围之前,它捕获的临时性是有效的。草药萨特可以更好地解释它。