为什么路径转义字符对于boost :: filesystem :: path和std :: filesystem :: path是不同的?

时间:2016-11-22 12:08:22

标签: c++ path standards c++17 boost-filesystem

boost::filesystem::path使用&来转义路径字符串see demo中的引号:

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

打印"/R&&D/Project &"boost&""。但是,对于std::filesystem::path I see this

  

在路径p上执行流输入或输出。使用std :: quoted以便以后在流输入操作符读取时不会截断空格。

此处来自std::quoted

  

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

据此我可以说std::filesystem::path将使用\代替&

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

奖金问题:是否有std::filesystem::path可用的实施?似乎没有最新的GCC和clang提供<filesystem>标题。

2 个答案:

答案 0 :(得分:2)

Boost :: Filesystem相当陈旧,早于C ++ 14的quoted。标准内部一致是完全合理的。继Boost之后只是次要问题。

答案 1 :(得分:1)

  

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

来自N3399,强调是我的:

  

Boost插入器输出引用的字符串,由提取器识别。 文件系统研究组中存在一种情绪,即提供带引号和/或转义的字符串操纵符作为字符串扩展名,这是一种比路径特定功能更好的解决方案。请参阅提案N3431,引用字符串库提案。

也就是说,文件系统研究小组认为使用quoted字符串操纵器比使用path

的特定功能更好
  

奖金问题:std :: filesystem :: path的实现是否可用?似乎没有最新的GCC和clang提供标题。

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