我在 vs 2022 社区版本上有这个 C++ 代码。
import std;
int main()
{
constexpr int x = 10;
constexpr int* p = &x;
}
我不允许将 x 的地址分配给 p,因为:“const int*”类型的值不能用于初始化“int* const”类型的实体。所以我理解
&x
的意思是const int*
,而p
是int* const
。为什么这样?我认为p
是pointer to const int
。看来 constexpr
适用于 p
而不是 int
。你能澄清一下吗?
constexpr int x = 10;
意味着 int const x = 10;
。
constexpr int* p = &x;
暗示 int* const p = &x;
- p
是指向可更改 int
的不可更改指针。
在通用形式中,
constexpr T x = t;
意味着T const x = t;
。它不会改变指针类型。
C++ 不允许将 const 的地址分配给指向非 const 的指针。
正确的解决方案:
constexpr int x = 10;
constexpr const int* p = &x;