在未来的C++版本中,我们会有一个size_t strlen(const char8_t*)吗C++20中的



char8_t修复了char的一些问题,因此我考虑使用char8_t而不是char来处理utf8文本(例如命令行中的文本(。但后来我注意到,标准中没有指定strlenchar8_t一起使用,实际上cstring库中没有任何函数。我可以期待在下一次标准更新中发生这种情况吗?还是char8_t从未像我想的那样取代char

我是P0482和P1423char8_t提案的作者。

这些建议的目的是引入char8_t类型,同时为char16_tchar32_t提供相同级别的支持,然后在以后提供附加功能。这些建议是在C++20开发周期后期(分别在圣地亚哥和科隆会议上(通过的,因此没有机会为C++20提供额外的功能。

P1238中描述的SG16指令之一是标准化新的编码感知文本容器和视图类型。这方面的工作正在取得进展,我们希望能在C++23中实现。希望这些新的容器和视图将取代C++中的许多原始字符串处理。

具体地,关于strlenstrlen是C API。N2231是向C添加char8_t支持的提议(同样,与现有的对char16_tchar32_t的支持处于相同级别(。14工作组尚未接受这一提议。假设它最终被接受,那么后续使用额外的基于char8_t的C字符串管理功能是有意义的(也许还可以增强对char16_tchar32_t的支持(。

目前,我正在完成N2231在gcc和glibc中的实现。一旦完成,我打算向WG14提交N2231的修订版。

你可以帮忙!SG16是一个开放组。请随时订阅我们的邮件列表,在Slack上加入我们,分享您的想法、需求和愿望,并为新功能撰写建议(我们可以帮助您了解如何做到这一点(。

这些新的字符类型旨在使用C++字符串模板std::basic_string,即定义std::u8string。因此,在您的情况下,最好使用C++字符串。

至于char8_t在cstring库中的未来支持,我认为这个问题更适合未来的C标准。恐怕,这不是一个容易的更新,也不太可能,因为C没有过载的函数,而且这次更新除了strlenwcslen之外,还需要c8slen等新函数。

char8_t适用于UTF-8编码的字符串。因此,用户将假设使用它们的API在某种程度上具有Unicode意识。<cstring>标头的许多内容不适合char8_t,因为它们的行为与Unicode非常不一致(strcmp会进行正确的Unicode排序吗?(。

如果您希望访问与<cstring>函数类似的函数,那么您会发现std::char_trait<char8_t>包含一些有用的函数,特别是length(与strlen完全类似(和compare(显式字典化(。CCD_ 36的其余大部分可以通过C++算法进行充分处理。

0仍然可以在utf8字符串中充当null终止符,因此从技术上讲,没有什么可以阻止您(除了缺少适当的函数(使用strlen来计算utf8序列中的字节数(!(。如果你想找到字符数,你需要一个单独的函数。

最新更新