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

标签 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

我浏览了一下。标准的措辞有细微的变化,但我看到的唯一代码变化是 namespace 变化,删除了“实验”和“v1”部分,因此“std::experimental::filesystem::v1”变成了“std::filesystem” ",这是预期的。

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

换句话说,我正在使用带有 -std=c++14 的 gcc。我现在可以使用 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?

最佳答案

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

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

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


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

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

关于c++ - c++14 std::experimental::filesystem::v1 和 c++17 std::filesystem 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48347642/

相关文章:

c++ - 为什么会有两个版本的 operator new 重载?

只能在一种方法中更改的 C++ 全局变量,可能吗?

C++17 结合了 std::async 和 std::invoke

c++ - 为什么这会导致死锁?

c++ - 从 JSON 字符串中获取数组时出错

c++ - `istreambuf_iterator` 和 `istream_iterator` 之间的区别

c++ - boost chrono endTime - startTime 在 boost 1.51 中返回负值

c++ - 有没有办法创建一个 cl::sycl::pipe 数组?

c++ - 仅从一个模板参数查找特定模板。是否可以?

c++ - 使用来自 std::vector 的参数调用可变参数模板化函数