Avatar ·

const vs constexpr 用于 C++ 变量:区别与选择

大家好!我正在学习 C++11/14,在声明变量时对 `const` 和 `constexpr` 的区别感到困惑。我知道这两个关键字都使变量不可变,但到处都说它们不是一回事。 以下是一个让我困惑的例子: ```cpp const int x = 42; // 选项 1 constexpr int y = 42; // 选项 2 const int z = foo(); // 可以工作 constexpr int w = foo(); // 如果 foo() 不是 constexpr,则编译错误 ``` 我读到 `constexpr` 保证在编译时计算,而 `const` 则不能。但既然 `constexpr` 更严格,为什么还需要 `const`?为什么我在实际项目中看到大量使用 `const` 来声明那些明显在编译时已知的变量? 另一个问题:如果我写 `const int size = 10;` 然后声明 `int arr[size];`——这能工作吗?如果 `size` 是通过函数计算的呢?我听说过 VLA(可变长度数组),并且知道这是 C++ 中的非标准扩展,但我不明白这如何