错误:无法使用类型为"const int * "的右值初始化类型为"int *const"的变量



为什么在编译以下代码时出现此错误:error: cannot initialize a variable of type 'int *const' with an rvalue of type 'const int *?代码:

constexpr int ch1 = 5;
constexpr int* pch1 = &ch1;
constexpr int ch2 = 5;
constexpr int* pch2 = &ch2;
cout << *pch1+*pch2;

让我把这一点说清楚。这整个折磨的重点是在编译时初始化这些变量。如果有更好的方法,请告诉我。

您已将pch1pch2声明为constexpr这一事实本身并不使它们成为const int *,因此您需要:

constexpr int ch1 = 5;
constexpr const int* pch1 = &ch1;
constexpr int ch2 = 5;
constexpr const int* pch2 = &ch2;

然而,你会得到:

error: '& ch1' is not a constant expression
error: '& ch2' is not a constant expression

所以你仍然没有赢。

现场演示


编辑:正如chris所指出的,您可以通过将ch1ch2声明为static来解决后一个问题。然后他们的地址变成constexpr:

constexpr static int ch1 = 5;
constexpr const int* pch1 = &ch1;
constexpr static int ch2 = 5;
constexpr const int* pch2 = &ch2;

现场演示

相关内容

最新更新