为什么 boost::filesystem::p ath 和 std::filesystem::p ath 的路径转义字



boost::filesystem::path使用&来转义路径字符串中的引号,请参见演示:

std::cout << boost::filesystem::path("/R&D/Project "boost"") << std::endl;

打印"/R&&D/Project &"boost&"".但是,对于std::filesystem::path,我看到的是:

在路径 p. 上使用 std::quote 执行流输入或输出,以便在以后由流输入运算符读取时不会截断空格。

这是来自std::quoted

转义 - 用作转义字符的字符,默认为 \

由此我可以看出std::filesystem::path将使用而不是&.

这是对的吗?如果是,为什么委员会决定改变这种行为?

奖励问题:是否有任何可用的std::filesystem::path实现?似乎最新的 GCC 和 clang 都没有提供<filesystem>标头。

Boost::文件系统相当古老,早于 C++14 的quoted。标准内部一致是完全合理的。遵循 Boost 只是次要问题。

如果是

,为什么委员会决定改变这种行为?

从 N3399 开始,强调的是我的:

Boost 插入器输出带引号的字符串,提取器会识别这些字符串。文件系统研究组内部有一种观点,即提供带引号和/或转义的字符串操纵器作为字符串扩展将比特定于路径的功能更好的解决方案。请参阅提案 N3431,引用字符串库提案。

也就是说,文件系统研究小组认为使用字符串操纵器比使用特定功能更好quotedpath

奖励问题:是否有任何 std::filesystem::p ath 的实现可用?似乎最新的 GCC 和 clang 都没有提供标题。

AFAIK,主要的编译器,如g++,clang,msvc都提供filesystem作为实验性功能,<experimental/filesystem>命名空间std::experimental::filesystem。 gcc 从 5.3 版开始,你可以在这里看到,MSVC 从 VS2012 开始(它在 VS2012 和 VS2013 中<filesystem>,然后在 VS2015 中移动到<experimental/filesystem><filesystem>)

最新更新