C++ c+中的有符号或无符号整数+;

C++ c+中的有符号或无符号整数+;,c++,std,unsigned,signed,C++,Std,Unsigned,Signed,如何检查给定的int(或任何其他数据类型)是有符号的还是无符号的? 我在搜索时找到了这个函数 std::numeric_limits<int>::is_signed 现在我想做一个函数,检查x是否是有符号整数 如果你们能回答这些小问题,我们将不胜感激 为什么在std之后使用“::”这些运算符 当我们在std::cout中使用它们时,它们是什么意思,是相同的吗 这里的数字限制是一个类还是什么 再说一遍,为什么我们要在签名之前使用这些“::” 像这样: constexpr bool i

如何检查给定的int(或任何其他数据类型)是有符号的还是无符号的? 我在搜索时找到了这个函数

std::numeric_limits<int>::is_signed
现在我想做一个函数,检查x是否是有符号整数

如果你们能回答这些小问题,我们将不胜感激

  • 为什么在std之后使用“::”这些运算符
  • 当我们在std::cout中使用它们时,它们是什么意思,是相同的吗
  • 这里的数字限制是一个类还是什么
  • 再说一遍,为什么我们要在签名之前使用这些“::”
  • 像这样:

    constexpr bool is_signed = std::numeric_limits<decltype(x)>::is_signed();
    
    是的,两者都是类模板

    有没有一种方法可以通过变量名进行检查

    从C++11开始,我们使用
    decltype
    来获取变量或表达式的类型:

    std::numeric_limits<decltype(x)>::is_signed
    
    std::numeric\u limits::有符号
    
    从历史上看,这更为棘手;从变量推断类型的唯一方法是通过模板参数推断:

    template <typename T>
    bool is_signed(T const &) {
        return std::numeric_limits<T>::is_signed;
    }
    
    模板
    布尔符号(T常数&){
    返回标准::数字限制::有符号;
    }
    
    为什么在std之后使用“::”这些运算符

    这是范围解析运算符,表示我们希望在命名空间
    std
    中查找名称
    numeric\u limits

    当我们在
    std::cout
    中使用它们时,它们是什么意思

    对。与标准库中的大多数名称一样,
    cout
    也在
    名称空间std
    中起作用

    这里的
    numeric\u limits
    是一个类还是什么

    它是一个类模板,包含各种静态变量和函数,用于描述用作模板参数的类型。这里有一个参考:

    再说一遍,为什么我们要在签名之前使用这些“::”


    同样,我们希望在
    std::numeric\u limits

    的类范围内查找名称
    is_signed
    ,请在每篇文章中回答一个问题。关于“::”您可以在c++中搜索google”命名空间运算符“
    是范围解析运算符,确切地说,函数如何不知道
    x
    是否已签名?它是一个函数模板吗?C++98还可以做得更好,并从中获得编译时常量:
    boost::Is\u signed::value
    std::numeric_limits<decltype(x)>::is_signed
    
    template <typename T>
    bool is_signed(T const &) {
        return std::numeric_limits<T>::is_signed;
    }