获取const lvalue参考的地址是合法的吗?
Is it legal to take the address of a const lvalue reference?
#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
脱离范围之前,它捕获的临时性是有效的。草药萨特可以更好地解释它。