consteval
是 C++20 引入的一個新關鍵字,它用于指示一個函數必須在編譯時進行計算。換句話說,consteval
函數會產生編譯時常量。要在 C++ 中使用 consteval
函數,請按照以下步驟操作:
consteval
是 C++20 標準的一部分,因此你需要一個支持 C++20 的編譯器(例如 GCC 10 或更高版本、Clang 10 或更高版本、MSVC v19.25 或更高版本)。-std=c++20
。consteval int square(int x) {
return x * x;
}
consteval
函數在編譯時計算結果,因此可以將其結果用作模板參數或初始化 constexpr
變量。template<int N>
struct Squared {
static constexpr int value = N;
};
constexpr int x = square(3); // 在編譯時計算
Squared<square(4)> s; // 在編譯時計算并用作模板參數
consteval
函數必須滿足一些額外的限制,例如它們不能有循環、遞歸調用等。此外,它們只能調用其他 consteval
函數。下面是一個完整的示例代碼:
#include<iostream>
consteval int square(int x) {
return x * x;
}
template<int N>
struct Squared {
static constexpr int value = N;
};
int main() {
constexpr int x = square(3);
std::cout << "The square of 3 is: " << x << std::endl;
Squared<square(4)> s;
std::cout << "The square of 4 is: " << s.value<< std::endl;
return 0;
}
在支持 C++20 的編譯器上編譯和運行此代碼,你將看到輸出:
The square of 3 is: 9
The square of 4 is: 16