constexpr 和 const 的区别,详细回答
时间: 2024-02-05 14:10:30 浏览: 70
C++中的const和constexpr详解
constexpr 和 const 都是 C++ 中用来声明常量的关键字,但它们有不同的作用和用法。
1. const
const 常量是指一旦被初始化就不能被修改的变量。const 可以用于任意类型的变量、函数参数、函数返回值等。
例如:
```
const int a = 10; // 定义一个 const int 常量 a
const double PI = 3.1415926; // 定义一个 const double 常量 PI
void func(const int b) { // 定义一个带有 const 参数的函数
// b = 20; 错误,b 是 const,不能修改其值
}
const int& getA() { // 定义一个返回 const 引用的函数
return a;
}
```
2. constexpr
constexpr 常量是指在编译时就能求值的常量。constexpr 可以用于任意类型的变量、函数和构造函数。
例如:
```
constexpr int c = 100; // 定义一个 constexpr 常量 c
constexpr int add(int x, int y) { // 定义一个 constexpr 函数
return x + y;
}
class Test {
public:
constexpr Test(int x) : val(x) {} // 定义一个 constexpr 构造函数
private:
int val;
};
```
需要注意的是,constexpr 变量和函数必须满足以下要求:
- 必须在编译时能够求值。
- 变量必须被声明为 const 或者是 static。
- 函数必须满足单一返回语句且函数体内只有一条 return 语句。
总的来说,const 和 constexpr 都用于声明常量,但其作用和用法不同。const 声明的常量是在运行时确定的,而 constexpr 声明的常量是在编译时确定的。对于需要在编译时确定的常量和函数,应该使用 constexpr。对于需要在运行时确定的常量和函数,可以使用 const。
阅读全文