查看此 cppreference.com 页面,std::filesystem::path::filename
该方法的描述实际上只是“等效于relative_path().empty() ? path() : *--end()
”。我从未见过这种语法“*--end()”。我可以从上下文中弄清楚它的作用,但它到底是什么意思?并且可以在不同的上下文中使用它来提取子字符串吗?
问问题
412 次
1 回答
2
首先,让我们看一下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()
表示如果没有相对路径(即,只有一个文件名或什么都没有),则返回整个内容,否则如果有相对路径,则返回路径列表的最后一个元素,这将是文件名。
于 2019-10-18T00:10:02.440 回答