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