C++中constexpr和const的区别是什么?
大家好!我开始学习C++11,遇到了新的关键字`constexpr`。以前我一直用`const`来声明不可变变量。但现在又出现了`constexpr`,我无法完全理解什么时候该用哪个。
例如,我写这样的代码:
```cpp
const int size = 5;
int arr[size]; // 这可以工作
```
但如果我写:
```cpp
int get_size() { return 5; }
const int size = get_size();
int arr[size]; // 在旧标准中编译错误!
```
我明白`const`只是禁止在初始化后修改变量,但不保证值在编译时已知。同时,我看到一些`constexpr`的例子:
```cpp
constexpr int square(int x) { return x * x; }
constexpr int val = square(5); // 可以,在编译时计算
```
问题:
1. 对于变量来说,`const`和`constexpr`的根本区别是什么?
2. 什么时候应该对函数使用`constexpr`?
3. `constexpr`能否替代`con