2

给定以下代码:

  fs::path p{ "a/b/" };
  fs::path q{ "a/b/." };  
  assert(p == q);         

[注意定义 q 的字符串末尾的额外点。]

如上所述,boost::filesystem 接受 p == q 为真,但 gcc 和 llvm 的 std::filesystem 实现说它是假的。

为什么 boost 和 std 之间存在差异?

PS在这个问题的以前版本中,我错误地认为在比较之前应该对路径进行规范化。事实并非如此。即便如此,boost 和 std 之间的差异对我来说仍然是个谜。

4

1 回答 1

1

简短的回答是,.在 Unix 上是一个实际的文件系统节点链接,这有时很重要。请参阅此堆栈溢出答案

编辑

但是,我不能假定知道标准委员会关于文件系统库行为的意图,我也不认为库对 Unix 符号链接行为了解那么多是合理的。简而言之,这可能是也可能不仅仅是标准措辞与 Boost 对事情应该如何工作的看法的一个怪癖。

于 2020-04-14T15:27:25.050 回答