我们会在未来的 C++ 版本中使用 size_t strlen(const char8_t*)
Will we have a size_t strlen(const char8_t*) in a future C++ version
char8_t
在 C++20 中修复了 char
的一些问题,所以我正在考虑使用 char8_t
而不是 char
用于 utf8 文本(例如来自命令的文本线)。但后来我注意到 strlen
没有在标准中指定与 char8_t
一起使用,实际上 cstring 库中的函数 none 是。我可以期望这会在下一次标准更新中发生吗?还是 char8_t
从未打算按照我的想法替换 char
?
这些新的char类型是为了使用C++字符串模板std::basic_string
,即定义std::u8string
。所以在你的情况下最好的是使用 C++ 字符串。
关于cstring库中char8_t
的未来支持,我想这个问题更适合未来的C标准。恐怕,这不会是一个简单的更新,也不太可能更新,因为 C 没有重载函数,并且此更新将需要新函数,如 c8slen
除了 strlen
和 [=15] =].
我是 P0482 and P1423 char8_t
提案的作者。
这些提案的目的是引入 char8_t
类型,为 char16_t
和 char32_t
提供相同级别的支持,然后在以后跟进其他功能。这些提议是在 C++20 开发周期的后期(分别在圣地亚哥和科隆会议上)通过的,因此没有机会为 C++20 提供额外的功能。
SG16 as described in P1238 的指令之一是标准化新的编码感知文本容器和视图类型。这方面的工作正在取得进展,我们希望为 C++23 提供它。希望这些新的容器和视图能够取代 C++ 中的大量原始字符串处理。
具体来说strlen
,strlen
是一个CAPI。 N2231 是为 C 添加 char8_t
支持的提案(同样,与 char16_t
和 char32_t
的现有支持处于同一级别)。 WG14 尚未接受该提案。假设它最终被接受,那么跟进额外的基于 char8_t
的 C 字符串管理函数(也许还增强对 char16_t
和 char32_t
的支持)是有意义的。
目前,我正在努力完成 N2231 在 gcc 和 glibc 中的实现。完成后,我打算将 N2231 的修订版提交给 WG14。
你可以帮忙! SG16 是一个开放组。请随时订阅我们的邮件列表,加入我们的 Slack,分享您的想法、需求和愿望,并为新功能撰写提案(我们可以帮助您实现)。
char8_t
适用于 UTF-8 编码的字符串。因此,使用它们的 API 将被用户假定 在某种程度上支持 Unicode。相当多的 contents of the <cstring>
header 不适合 char8_t
,因为它们的行为非常不符合 Unicode(strcmp
会做正确的 Unicode 整理吗?)。
如果您想访问与 <cstring>
函数类似的函数,那么您会发现 std::char_trait<char8_t>
to contain some useful ones,尤其是 length
(与 strlen
完全一样)和 compare
(明确的字典顺序)。 <cstring>
的其余大部分可以通过 C++ 算法充分处理。
char8_t
在 C++20 中修复了 char
的一些问题,所以我正在考虑使用 char8_t
而不是 char
用于 utf8 文本(例如来自命令的文本线)。但后来我注意到 strlen
没有在标准中指定与 char8_t
一起使用,实际上 cstring 库中的函数 none 是。我可以期望这会在下一次标准更新中发生吗?还是 char8_t
从未打算按照我的想法替换 char
?
这些新的char类型是为了使用C++字符串模板std::basic_string
,即定义std::u8string
。所以在你的情况下最好的是使用 C++ 字符串。
关于cstring库中char8_t
的未来支持,我想这个问题更适合未来的C标准。恐怕,这不会是一个简单的更新,也不太可能更新,因为 C 没有重载函数,并且此更新将需要新函数,如 c8slen
除了 strlen
和 [=15] =].
我是 P0482 and P1423 char8_t
提案的作者。
这些提案的目的是引入 char8_t
类型,为 char16_t
和 char32_t
提供相同级别的支持,然后在以后跟进其他功能。这些提议是在 C++20 开发周期的后期(分别在圣地亚哥和科隆会议上)通过的,因此没有机会为 C++20 提供额外的功能。
SG16 as described in P1238 的指令之一是标准化新的编码感知文本容器和视图类型。这方面的工作正在取得进展,我们希望为 C++23 提供它。希望这些新的容器和视图能够取代 C++ 中的大量原始字符串处理。
具体来说strlen
,strlen
是一个CAPI。 N2231 是为 C 添加 char8_t
支持的提案(同样,与 char16_t
和 char32_t
的现有支持处于同一级别)。 WG14 尚未接受该提案。假设它最终被接受,那么跟进额外的基于 char8_t
的 C 字符串管理函数(也许还增强对 char16_t
和 char32_t
的支持)是有意义的。
目前,我正在努力完成 N2231 在 gcc 和 glibc 中的实现。完成后,我打算将 N2231 的修订版提交给 WG14。
你可以帮忙! SG16 是一个开放组。请随时订阅我们的邮件列表,加入我们的 Slack,分享您的想法、需求和愿望,并为新功能撰写提案(我们可以帮助您实现)。
char8_t
适用于 UTF-8 编码的字符串。因此,使用它们的 API 将被用户假定 在某种程度上支持 Unicode。相当多的 contents of the <cstring>
header 不适合 char8_t
,因为它们的行为非常不符合 Unicode(strcmp
会做正确的 Unicode 整理吗?)。
如果您想访问与 <cstring>
函数类似的函数,那么您会发现 std::char_trait<char8_t>
to contain some useful ones,尤其是 length
(与 strlen
完全一样)和 compare
(明确的字典顺序)。 <cstring>
的其余大部分可以通过 C++ 算法充分处理。