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
是否为整数或浮点类型。如果不是,编译器会报错并显示提供的错误信息。