繁体   English   中英

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

[英]Differences between c++14 std::experimental::filesystem::v1 and c++17 std::filesystem?

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

https:\/\/isocpp.org\/files\/papers\/p0636r0.html<\/a>

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

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

我浏览了一下。 标准有一些小的措辞更改,但我看到的唯一代码更改是命名空间更改,删除了“实验”和“v1”部分,因此“std::experimental::filesystem::v1”变成了“std::filesystem ",这是意料之中的。

据我所知,除了命名空间路径没有任何变化。 有谁知道是否还有其他变化?

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

我能找到的最接近重复的问题:

Boost 文件系统和标准 C++ 文件系统库有多相似?<\/a>

现代 C++ 的实验特性对于长期项目是否可靠?<\/a>

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

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

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


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

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

延迟回复,但是当我自己寻找同一问题的答案时,我遇到了这个问题。 当我终于弄清楚事情时,我想我会在这里发表我的观察。

std::experimental::filesystem迁移到std::filesystem时,我遇到了以下更改:

# c++14 std::experimental::filesystem c++17 std::filesystem
1 canonical()具有接受基本路径的重载,可用于解析第一个参数中传递的路径 canonical()没有这个重载,这破坏了我的一些代码
2 canonical()不检查路径是否存在 canonical()确实检查路径是否存在,因此如果在调用此函数时遇到路径可能不存在的情况,请切换到std::filesystem::weakly_canonical
3 插入运算符 ( << ) 为您提供不带引号和未转义的字符串。 例如C:\\my\\file.txt 插入运算符 ( << ) 在完整路径周围添加引号并转义反斜杠 ( \\ )。 例如"C:\\\\my\\\\file.txt"这打破了我的一些测试,我不得不调用路径对象的string (或wstring )方法来获取未加引号和未转义的字符串。
4 file_time_typestd::chrono::system_clock::time_pointtypedef file_time_typestd::chrono::time_point<filesystem::_File_time_clock>的别名。 这导致了我的代码中某些地方的编译错误,我期望它是system_clock::time_point

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM