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

use*_*878 4 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 ::实验::文件系统:: V1"变成了"的std ::文件系统",这是预料之中的.

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

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

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

Boost文件系统和标准C++文件系统库有多相似?

现代C++的实验性功能是否可靠用于长期项目?

T.C*_*.C. 9

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

  • P0219R1,添加相对路径支持
  • P0317R1,添加缓存directory_entry
  • P0492R2,一个冗长的修复和更改列表,以回应国家机构的评论
  • P0430R2,支持某些非POSIX系统

还有一些相对较小的修复和更改可以在LWG问题列表中找到.查找"C++ 17"状态的问题.请注意,其中一些更改将被上面列出的文件取代.


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

  • path(".profile").stem() 就是现在 ".profile"
  • operator/path如果rhs是绝对路径或具有根名称,则其语义会发生显着变化.path("/foo") / "/bar"现在"/bar"而不是"/foo/bar"; path("C:\\x") / "D:y"现在在Windows上"D:y".
  • 老去absolute了.system_complete已重命名absolute.
  • permissions签名发生了微小变化.

  • @balki 这毫无意义。即使使用旧的语义,用户也可以预先添加尽可能多的 `../` 以达到相同的目的。 (4认同)