给定以下代码:
fs::path p{ "a/b/" };
fs::path q{ "a/b/." };
assert(p == q); 请注意,定义q的字符串末尾有一个额外的点。
如上所述,boost::filesystem接受p std q为真,但gcc的==::filesystem和llvm的std::filesystem实现说它是假的。
为什么boost和std之间存在差异?
附注:在这个问题的以前版本中,我错误地认为路径应该在比较之前被标准化。事实并非如此。尽管如此,boost和std之间的差异对我来说仍然是一个谜。
发布于 2020-04-14 23:27:25
简单地说,Unix上的.是一个实际的文件系统节点链接,这有时很重要。参见this stack overflow answer。
编辑
然而,我不能假设知道标准委员会关于文件系统库行为的意图,我也不认为库知道太多关于Unix符号链接的行为是合理的。简而言之,这可能是,也可能不是标准措辞的怪癖,而是Boost对事情应该如何工作的看法。
https://stackoverflow.com/questions/61192574
复制相似问题