为什么在c ++ 20中不推荐使用std :: filesystem :: u8path?

Gui*_*ris 15 c++ c++20

在c ++ 17中引入,std::filesystem::u8path似乎在c ++ 20中被弃用了.

这个选择的原因是什么?我应该在c ++ 17中使用什么?我应该在c ++ 20中使用什么?

Nic*_*las 14

因为存在char8_t,这将起作用:

path p(u8"A/utf8/path");
Run Code Online (Sandbox Code Playgroud)

u8path存在以允许检测UTF-8字符串和窄字符串之间的差异.但是,由于C++ 20将为我们提供实际类型,因此不再需要它.


我应该在c ++ 17中使用什么?

使用u8path.弃用并不意味着被删除无法访问.它仅仅意味着最终被删除.

目前,u8path(u8"A/UTF8/String")由于u8现在创建了一个char8_t字符串,在C++ 20 中将无法在C++ 20中编译.但是,C++ 20 可以得到一个改变u8path是需要char8_t的字符串.

  • @NicolBolas,如果你没有看到 40 年历史的语言有什么问题,仍然处于在一个版本中引入功能但在下一个版本中弃用它们的阶段,那么进行此讨论是没有意义的。 (6认同)
  • 如果我有 UTF-8 编码的 `std::string` 该怎么办? (5认同)
  • @NicolBolas 感谢您的回答。但是如果我已经有一个 'std::string' 编码的 UTF8,我应该如何从中构建一个 '路径'? (4认同)
  • @Taw:那么你必须更新其中一些 500K LOC。从“char const*”到“char8_t const*”的简单转换就足够了。也就是说,将 `fs::u8path(str)` 转换为 `fs::path((char8_t const*)str)`。您甚至可以将其自动化。 (2认同)