【发布时间】:2021-09-17 06:34:48
【问题描述】:
在 C++ 类型特征中
std::is_integral<T>::value 返回 true,即使 T 是布尔值,根据其描述是正确的。
但是,如果 bool 是不同于其他整数类型的类型,为什么在这种情况下将其视为整数类型? 为什么我们没有单独的 std::is_boolean 类型特征?
#include <iostream>
#include <type_traits>
int main()
{
std::cout << std::boolalpha;
std::cout << std::is_same<int, bool>::value << ' '; // ~ false
std::cout << std::is_same<unsigned int, bool>::value << ' '; // ~ false
std::cout << '\n';
std::cout << std::is_integral<bool>::value << ' '; // ~ true
return 0;
}
【问题讨论】:
-
您可以通过
is_same测试布尔值。为什么要为 bool 添加特殊特征? bool 与其他积分有何不同?只是位数不同。 -
我很确定
bool是一个整数类型。 "Integral type" != 与int/unsigned int相同,您似乎正在检查。 -
为什么
bool不是整数类型?long和char也是与int不同的积分类型。为什么我们没有特殊特征is_char或is_long?作为一个整体类型和作为一个int是两个不同的东西。 -
@463035818_is_not_a_number 在数学中可悲的是,这可能是一个更常见的定义。这真的应该被称为
std::is_fundamental/essential或者更清楚的东西,因为编程中的“整数”是模棱两可的,因为 C++ 有整数类型,但也有整数类型。 en.cppreference.com/w/cpp/language/… -
basic.fundamental: "bool、char、wchar_t、char8_t、char16_t、char32_t 类型以及有符号和无符号整数类型 [...] 统称为整数类型。整数类型的同义词是整数类型。”
标签: c++ c++11 typetraits