为什么在编译以下代码时出现此错误: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;
让我把这一点说清楚。这整个折磨的重点是在编译时初始化这些变量。如果有更好的方法,请告诉我。
您已将pch1
和pch2
声明为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所指出的,您可以通过将ch1
和ch2
声明为static
来解决后一个问题。然后他们的地址变成constexpr
:
constexpr static int ch1 = 5;
constexpr const int* pch1 = &ch1;
constexpr static int ch2 = 5;
constexpr const int* pch2 = &ch2;
现场演示