首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个绝对std::文件系统::path实例的级联

多个绝对std::文件系统::path实例的级联
EN

Stack Overflow用户
提问于 2022-03-21 06:14:37
回答 2查看 196关注 0票数 1

为什么连接以下路径/c/d的结果?

代码语言:javascript
复制
std::filesystem::path{"/a"} / std::filesystem::path{"b"} / std::filesystem::path{"/c/d"}

到目前为止,我的心智模型已经将结果路径设置为/a/b/c/d。令我惊讶的是,它仅仅是/c/d。很想知道我哪里出了问题。(以及正确的心理模型是什么)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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/=

path& operator/=( const path& p ); 如果为p.is_absolute() || (p.has_root_name() && p.root_name() != root_name()),则将当前路径替换为p,就像用operator=(p)替换并完成。

要获得所需的结果,请从/中删除领先的/c/d,使其成为一个相对路径:

代码语言:javascript
复制
std::filesystem::path{"/a"} / std::filesystem::path{"b"} / std::filesystem::path{"c/d"}
票数 7
EN

Stack Overflow用户

发布于 2022-03-21 06:38:50

什么是正确的心理模型?

a / b的意思是“如果b不是绝对的,那么它是相对于a的”。

这允许您有一个“默认”的基本目录,假定rhs位于其中,如果路径不是绝对的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71553445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档