const int n = 3; constexpr int N = n; 仍然报错C++ expression must have a constant valuethe value of variable (declared at line 12) cannot be used as a constant
时间: 2024-01-10 14:03:24 浏览: 227
这是因为 `const` 和 `constexpr` 的区别:
- `const` 变量在编译时确定,但在运行时可能会发生变化;
- `constexpr` 变量必须在编译时确定,并且在运行时不能发生变化。
因此,虽然你使用了 `constexpr` 修饰变量 `N`,但是你依然在声明变量 `n` 时使用了 `const`,导致 `n` 不是编译时常量,所以无法用于数组的大小。
如果你想要定义一个编译时常量,可以使用如下方式:
```c++
#define N 3
```
或者:
```c++
const int N = 3;
```
这两种方式都可以在数组大小的声明中使用。
相关问题
我在c语言中使用const定义了一个变量n,但是在使用double(*A)[n] = new double[n][n]();语句定义矩阵时报错,C++ expression must have a constant valuethe value of variable (declared at line 12) cannot be used as a constant
在C语言中,const定义的变量并不是常量,它们只是只读变量,也就是说不能通过赋值改变它们的值。在C++中,const定义的变量是常量,它们在编译时就已经确定了它们的值。
对于你的问题,C++要求定义数组时使用常量表达式作为数组的维度。因为n是一个const定义的只读变量,所以不能用它来定义数组的维度。解决方法是使用C++11标准引入的constexpr关键字来定义常量表达式。具体做法如下:
```c++
const int n = 3;
constexpr int N = n;
double(*A)[N] = new double[N][N]();
```
这里,将n赋值给N,并使用N来定义数组的维度。由于N是一个常量表达式,所以可以通过编译。
阅读全文