如何解决std::filesystem::path 没有运算符+?
可以使用 /
运算符在一行中append 多个路径:
std::filesystem::path p1{"A"};
auto p2 = p1 / "B" / "C";
比较方便。但是,concat 只提供 +=
:
std::filesystem::path p1{"A"};
auto p2 = p1 / "B" / "C" + ".d"; // NOT OK
这很烦人,因为我无法轻松地在路径的末尾添加扩展。我别无选择,只能写类似
std::filesystem::path p1{"A"};
auto p2 = p1 / "B" / "C";
p2 += ".d";
我错过了什么吗?这种不一致有什么原因吗?
解决方法
这有点推测性,但我认为这样做的原因是 operator+
很容易与 operator/
混淆。如果按以下方式使用,则会导致错误
path p2{"/"};
auto p1 = p2 + "A" + "B";
// Wants /A/B,gets /AB
使用字符串文字使解决方法更好:
using namespace std::literals;
std::filesystem::path p1{"A"};
auto p2 = p1 / "B" / ("C"s + ".d");
此处,"C"s
创建了一个内容为 std::string
的 C
,然后我们使用 std::string
的 operator+
。如果 "C"
部分本身已经是一条路径(否则你可以只写 "C.d"
开始),你可以做
std::filesystem::path p1{"A"},c_path{"C"};
auto p2 = p1 / "B" / (c_path += ".d");
因为 operator+=
返回结果对象。 (这有点浪费,但我可以想象编译器会优化它)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。