【发布时间】:2021-06-04 18:12:26
【问题描述】:
C++20 添加了std::countl_one。根据cppreference.com:
仅当 T 为无符号整数类型(即
unsigned char、unsigned short、unsigned int、unsigned long、unsigned long long或扩展的无符号整数类型)时,此重载才参与重载决议。
因此,它不适用于任何 UTF 字符类型(char8_t、char16_t、char32_t)或wchar_t。该函数对于实现 UTF 编码/解码很有用。排除是为了什么?我想在调用该函数之前可以转换为其他整数类型,但这似乎仍然是一个不必要的额外步骤。
【问题讨论】:
-
不确定或我会回答,但我怀疑较新的字符类型尽可能不表现得像数字,而是用作描述字符的不透明数据。看起来很多数字都将它们排除在外,因此您不会无意中在整数上下文中使用不是逻辑上整数的东西(即使实际上,它总是存储为一个)(修复
char类型追溯是不可能的)。 -
@ShadowRanger 它们支持所有其他类型的算术(加、减、乘、除、按位等)。它不像
enum class那样真正不支持任何类型的开箱即用算术。 -
是的,我并不是说半途而废“是不是整数”这件事是有道理的,但我怀疑这就是它的根源。
-
UTF-8 是一种可变长度编码。它不能为所有可能的 unicode 点分配给唯一的 wchar_t。
-
@Ripi2 这有什么关系?