c ++ 是指向文字的常量指针有效吗?

c++ is const pointer to literal valid?

我知道左值可以转换为常量引用。我很好奇我是否可以获得指向这些左值的指针。

如果我写

const int* p = &3; //ERROR: lvalue required as unary operand '&'

我收到这个错误。然而,

const int* p = &((const int&)3);

这编译。在这种情况下,*p的结果是否保证为3?

这会构造一个临时 int(3) 并将其绑定到一个 const 引用。 p 指向那个临时的。临时对象的生命周期被延长以匹配引用的生命周期——但是引用本身是一个临时对象并且在分号处被销毁,留下 p 一个悬空指针。之后任何使用 p 的尝试(除了为其分配新值)都会表现出未定义的行为。