为什么连接以下路径/c/d的结果?
std::filesystem::path{"/a"} / std::filesystem::path{"b"} / std::filesystem::path{"/c/d"}到目前为止,我的心智模型已经将结果路径设置为/a/b/c/d。令我惊讶的是,它仅仅是/c/d。很想知道我哪里出了问题。(以及正确的心理模型是什么)
发布于 2022-03-21 06:37:30
/a是一个绝对路径,而b是一个相对路径,因此连接它们将产生/a/b。
但是/c/d也是一个绝对路径,所以将它与前面的任何东西连接起来基本上是一个不操作,绝对路径将优先,所以最终的结果就是/c/d。
这将在cppreference.com上进行更详细的讨论:
std::filesystem::operator/(std::filesystem::path)
如果适当,可以使用首选目录分隔符来连接两个路径组件(有关详细信息,请参阅运算符/= )。 有效地返回
path(lhs) /= rhs。
path& operator/=( const path& p );如果为p.is_absolute() || (p.has_root_name() && p.root_name() != root_name()),则将当前路径替换为p,就像用operator=(p)替换并完成。
要获得所需的结果,请从/中删除领先的/c/d,使其成为一个相对路径:
std::filesystem::path{"/a"} / std::filesystem::path{"b"} / std::filesystem::path{"c/d"}发布于 2022-03-21 06:38:50
什么是正确的心理模型?
a / b的意思是“如果b不是绝对的,那么它是相对于a的”。
这允许您有一个“默认”的基本目录,假定rhs位于其中,如果路径不是绝对的。
https://stackoverflow.com/questions/71553445
复制相似问题