在此cppreference.com页面上查找std::filesystem::path::filename
,该方法的描述从字面上看就是“等同于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()
说如果没有相对路径(即,只有文件名或什么都没有),则返回整个内容,否则,如果存在相对路径,则返回路径列表的最后一个元素,即文件名。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句