Avatar ·

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