如图,给 is_function_v 传入一个类,为假,传入一个函数对象则为真 。
(2)以下是文心一言的解释,真好:
在 C++ 中,std::is_function_v 是一个类型特征(type trait),用于检查给定的类型是否为函数类型。它是 C++17 中引入的一个模板元函数,返回一个布尔值,表示给定的类型是否为函数类型。
以下是使用 std::is_function_v 的示例:
#include <iostream>
#include <type_traits>
template <class _Ty> // only function types and reference types can't be const qualified
constexpr bool is_function_v = !is_const_v<const _Ty> && !is_reference_v<_Ty>;
int main() {
std::cout << std::boolalpha;
std::cout << "Is int a function type? " << std::is_function_v<int> << std::endl;
std::cout << "Is void(*)() a function type? " << std::is_function_v<void(*)()> << std::endl;
std::cout << "Is void(*)(int) a function type? " << std::is_function_v<void(*)(int)> << std::endl;
std::cout << "Is void(*)() const a function type? " << std::is_function_v<void(*)() const> << std::endl;
std::cout << "Is void(*)() & a function type? " << std::is_function_v<void(*)() &> << std::endl;
std::cout << "Is void(*)() && a function type? " << std::is_function_v<void(*)() &&> << std::endl;
return 0;
}
测试结果如下:
Is int a function type? false
Is void()() a function type? true
Is void()(int) a function type? true
Is void()() const a function type? true
Is void()() & a function type? true
Is void(*)() && a function type? true
其实在vs2019上的测试结果不一致。再附上一图: