多个绝对 std::filesystem::path 实例的串联

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。很想知道我在这里哪里出错了。(以及正确的心智模型是什么)

Rem*_*eau 8

/a是绝对路径,b是相对路径,因此连接它们将产生/a/b.

/c/d也是绝对路径,因此将其与前面的任何内容/c/d连接起来基本上是无操作,绝对路径将优先,因此最终结果只是。

cppreference.com 对此进行了更详细的讨论:

std::filesystem::operator/(std::filesystem::path)

如果适用,使用首选目录分隔符连接两个路径组件(有关详细信息,请参阅运算符/=)。

有效回报path(lhs) /= rhs

std::文件系统::路径::运算符/=

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)