static_assert
是 C++11 引入的一個關鍵字,用于在編譯時進行類型檢查。它允許開發者在代碼中定義一個編譯時的斷言,當斷言的條件不滿足時,編譯器會報錯并終止編譯。這有助于在編寫代碼時發現潛在的類型錯誤或其他問題。
使用 static_assert
的基本語法如下:
static_assert(常量表達式, "錯誤信息");
其中,常量表達式
是一個返回布爾值的表達式,如果表達式的結果為 false
,則觸發編譯錯誤。錯誤信息
是一個可選的字符串,用于描述導致編譯錯誤的原因。
下面是一個簡單的示例,展示了如何使用 static_assert
進行類型檢查:
#include <iostream>
#include <type_traits>
template <typename T>
void print_type() {
static_assert(std::is_integral<T>::value || std::is_floating_point<T>::value,
"print_type() 只接受整數或浮點類型");
std::cout << "類型是: " << typeid(T).name() << std::endl;
}
int main() {
print_type<int>(); // 正確:int 是整數類型
// print_type<std::string>(); // 錯誤:std::string 不是整數或浮點類型
return 0;
}
在這個示例中,我們定義了一個模板函數 print_type()
,它接受一個類型參數 T
。在函數內部,我們使用 static_assert
檢查 T
是否為整數或浮點類型。如果不是,編譯器會報錯并顯示提供的錯誤信息。