*--end() 在 C++ 中是什么意思?

What does *--end() mean in C++?

this cppreference.com page 中查看 std::filesystem::path::filename,该方法的描述实际上就是 "equivalent to relative_path().empty() ? path() : *--end()"。我从未见过这种语法“*--end()”。我可以从上下文中弄清楚它的作用,但它到底是什么意思?是否可以在不同的上下文中使用它来提取子字符串?

首先,让我们看看std::filesystem::path::begin()/end()。这允许您一次遍历一个目录的路径,因此对于 /user/kenyn/foo.bar 使用此代码:

fs::path p = "/user/kenyn/foo.bar";
for(auto &e : p)
    std::cout << e << '\n';

我们会看到:

user
kenyn
foo.bar

那么,什么是*(--(p.end()))?我添加了额外的括号,因此我们可以看到我们得到一个迭代器,指向带有 p.end() 的最后一个元素,使用 -- 向后移动一个以获取对 foo.bar 的引用,然后使用 * 取消对迭代器的引用,为我们提供指向最终路径元素 "foo.bar".

的指针

完整的表达式,则:

relative_path().empty() ? path() : *--end()

表示如果没有相对路径(即,只有文件名或什么都没有),return 整个内容,否则如果有相对路径,return 最后一个元素路径列表的一部分,这将是文件名。