C++ 检查变量是否使用is_signed进行签名
我想检查变量是否有符号。我发现了一个类模板,它的名字是我不能用它,因为我是C++的新手。如何检查变量是否有符号C++ 检查变量是否使用is_signed进行签名,c++,c++17,C++,C++17,我想检查变量是否有符号。我发现了一个类模板,它的名字是我不能用它,因为我是C++的新手。如何检查变量是否有符号 #include <iostream> #include <cmath> int main() { // the following short initialization is on purpose short price {10u}; std::cout << std::is_signed<price>::
#include <iostream>
#include <cmath>
int main() {
// the following short initialization is on purpose
short price {10u};
std::cout << std::is_signed<price>::value << '\n';
return 0;
}
#包括
#包括
int main(){
//以下简短的初始化是故意的
空头价格{10u};
类模板的std::cout参数必须是类型。
如果您有一个变量,并且希望获取其类型,则可以使用decltype:
std::cout << std::is_signed<decltype (price)>::value << '\n';
std::cout是有符号的
——与许多其他结构一样,它是对类型执行检查的一种方法,而不是对变量。您可以使用它来获取变量的基本类型
std::cout << std::is_signed<decltype(price)>::value << '\n'; //-> 1
std::cout签名的实现可以是
template<bool IsArithmetic, typename T> struct is_signed_impl : bool_constant<T(-1) < T(0)>
{};
template<typename T> struct is_signed_impl<false, T> : false_type
{};
template<typename T> struct is_signed
: is_signed_impl<is_arithmetic_v<T>, T>
{};
模板结构是有符号的\u impl:bool\u常量
{};
模板结构是\u签名的\u impl:false\u类型
{};
模板结构已签名
:是否已签名
{};
中的模板变量T
已签名
最终用于T(-1)
,用于强制转换。如果T是非类型参数,如price
,则强制转换的格式不正确。是有符号的
用于类型而不是变量。std::cout@john谢谢你的观点,但是我的意图呢?如果你想知道有符号类型是正的还是负的,请再次比较st zero.if(price<0){std::cout变量始终是有符号的,因为它是短的。从无符号文本初始化它并不重要。C++14方法稍微简单一点:cout@Red.WaveC++17的方法更简单:cout@RemyLebeau仅仅是“更简单”是错误的。应该是“更简单”。