numeric_limits类模板提供查询各种数据类型类型属性的标准化方式,支持的类型和偏特化版本格式如下:
    image.png
    我们可以通过numeric_limits类的静态成员常量和静态函数(编译期可用)获取类型的很多信息,常量和成员函数可访问:https://zh.cppreference.com/w/cpp/types/numeric_limits

    简单示例如下:

    1. //numeric_limits的使用示例
    2. #include <iostream>
    3. #include <limits>
    4. #include <string>
    5. using namespace std;
    6. int main()
    7. {
    8. cout << boolalpha; //打开bool的文本表示,用于标准输出
    9. //打印整型类型的最大值,输出和平台有关
    10. cout<<"max(short): "<<numeric_limits<short>::max()<<endl;
    11. cout<<"max(int): "<<numeric_limits<int>::max()<<endl;
    12. cout<<"max(long): "<<numeric_limits<long>::max()<<endl;
    13. cout<<endl;
    14. //打印浮点类型的最大值,输出和平台有关
    15. cout<<"max(float): "<<numeric_limits<float>::max()<<endl;
    16. cout<<"max(double): "<<numeric_limits<double>::max()<<endl;
    17. cout<<"max(long double): "<<numeric_limits<long double>::max()<<endl;
    18. cout<<endl;
    19. //打印char类型是否是有符号类型
    20. cout<<"is_signed(char): "<<numeric_limits<char>::is_signed<<endl;
    21. cout<<endl;
    22. //打印string类型是否有偏特化类版本
    23. cout<<"is_specialized(string): "<<numeric_limits<string>::is_specialized<<endl;
    24. }

    最后一行code可以看出,即使传入的类型不是数值类型,没有特化版本,也可以正常使用,不会造成编译和运行问题。