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