在C++20中,requires關鍵字用于定義一種編譯時的條件檢查,用于指定模板參數的要求。它可以在模板定義時指定一個或多個編譯時條件,如果這些條件不滿足,則編譯器會產生相應的錯誤信息。
requires語句在C++20中通常用于概念(concepts)的定義,用于限定模板參數的要求。例如,可以使用requires語句來強制模板參數必須支持某種操作或擁有某些特定的屬性。
以下是一個使用requires語句的示例:
template <typename T>
concept Integral = requires (T a, T b) {
{ a + b } -> std::same_as<T>;
{ a * b } -> std::same_as<T>;
{ a / b } -> std::same_as<T>;
{ a % b } -> std::same_as<T>;
};
template <Integral T>
T add(T a, T b) {
return a + b;
}
在上面的例子中,我們定義了一個概念Integral,該概念要求模板參數T支持加法、減法、乘法和取模操作。然后在add函數模板中使用了這個概念,確保傳入的參數類型符合Integral概念的要求。
需要注意的是,requires語句的主要目的是在模板定義時進行編譯時條件檢查,而不是在使用時進行運行時條件檢查。這有助于提前捕獲一些潛在的錯誤,并提高代碼的可靠性。