c ++ 14 std :: experimental :: filesystem :: v1和c ++ 17 std :: filesystem之间的区别?

时间:2018-01-19 18:44:17

标签: c++ c++14 c++17

我找到了这个页面,描述了c ++ 14和c ++ 17之间的变化:

https://isocpp.org/files/papers/p0636r0.html

...它链接到此页面,该页面描述了建议的文件系统更改:

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0218r0.html

我浏览了它。标准有一些小的措辞变化,但我看到的唯一代码更改是删除了“实验”和“v1”部分的命名空间更改,因此“std :: experimental :: filesystem :: v1”变为“std :: filesystem” “,这是预期的。

据我所知,命名空间路径以外的任何内容都没有改变。有没有人知道是否有其他变化?

换句话说,我正在使用gcc和-std = c ++ 14。我现在可以用std :: experimental :: filesystem编写代码,并且将来只需更改命名空间就可以轻松切换到-std = c ++ 17吗?

我能找到的最重要的问题是重复:

How similar are Boost filesystem and the standard C++ filesystem libraries?

Are the experimental features of modern C++ reliable for long-term projects?

1 个答案:

答案 0 :(得分:8)

对文件系统库进行更改的主要论文是

  • P0219R1,添加相对路径支持
  • P0317R1,将缓存添加到directory_entry
  • P0492R2,一份针对国家机构评论的修复和更改的详细清单
  • P0430R2,支持某些非POSIX系统

还可以找到一些相对较小的修复和更改in the LWG issue list。查找“C ++ 17”状态的问题。请注意,其中一些更改将被上面列出的论文取代。

对于现有的Filesystem TS代码,我希望P0492R2是最重要的代码,因为其余的论文主要是功能添加而不是更改。 P0492R2包括技术说明和重要的语义变化。立即想到的后一类中的一些是:

  • path(".profile").stem()现在是".profile"
  • 如果rhs是绝对路径或具有根名称,则operator/上的
  • path的语义会发生显着变化。 path("/foo") / "/bar"现在是"/bar"而不是"/foo/bar"; Windows上的path("C:\\x") / "D:y"现在为"D:y"
  • 旧的absolute消失了。 system_complete已重命名为absolute
  • permissions的签名稍作修改。