Trong C++20, constexpr và consteval được sử dụng để làm việc với các biểu thức hằng và tính toán tại thời điểm biên dịch.
1. **constexpr**: Là từ khóa dùng để chỉ định rằng một hàm hoặc biến có thể được tính toán tại thời điểm biên dịch. Hàm constexpr có thể được gọi trong ngữ cảnh cần một giá trị hằng, nhưng cũng có thể được gọi tại thời gian chạy. Ví dụ:
```cpp
constexpr int square(int x) {
return x * x;
}
```
2. **consteval**: Là từ khóa mới trong C++20, chỉ định rằng một hàm phải được tính toán tại thời điểm biên dịch. Nếu cố gắng gọi hàm consteval trong ngữ cảnh không phải biên dịch, sẽ gây ra lỗi biên dịch. Ví dụ:
```cpp
consteval int cube(int x) {
return x * x * x;
}
```
Tóm lại, constexpr cho phép tính toán tại cả thời điểm biên dịch và thời gian chạy, trong khi consteval buộc phải tính toán tại thời điểm biên dịch, giúp cải thiện hiệu suất và độ an toàn của mã nguồn.