*--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 最后一个元素路径列表的一部分,这将是文件名。
在 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 最后一个元素路径列表的一部分,这将是文件名。