我知道左值可以转换成const引用。如果我能得到指向这些左值的指针,我很好奇。
如果我写
const int* p = &3; //ERROR: lvalue required as unary operand '&'
我收到此错误。然而,
const int* p = &((const int&)3);
这个编译。在这种情况下,* p的结果是否保证为3?
答案 0 :(得分:8)
这构造了一个临时的int(3)
并将其绑定到一个const引用。 p
被指向那个临时的。临时的生命周期被扩展为与引用的生命周期相匹配 - 但引用本身是临时的,并在分号处被销毁,使p
成为悬空指针。之后任何尝试使用p
(除了为其分配新值)都会表现出未定义的行为。