“const int*”类型的值不能用于初始化“int* const”类型的实体

问题描述 投票:0回答:1

我在 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
。你能澄清一下吗?

c++ constants c++23
1个回答
0
投票

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;
© www.soinside.com 2019 - 2024. All rights reserved.