Cur*_*ous 1 c++ filesystems path c++17
为什么连接的结果是以下路径/c/d?
std::filesystem::path{"/a"} / std::filesystem::path{"b"} / std::filesystem::path{"/c/d"}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我的心智模型将结果路径设置为/a/b/c/d。令我惊讶的是,这很简单/c/d。很想知道我在这里哪里出错了。(以及正确的心智模型是什么)
/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,就像 by 一样operator=(p)并完成。
要获得所需的结果,请删除前导/from/c/d以使其成为相对路径:
std::filesystem::path{"/a"} / std::filesystem::path{"b"} / std::filesystem::path{"c/d"}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
568 次 |
| 最近记录: |