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

马修斯·利昂(MatheusLeão)

此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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章