【发布时间】:2021-01-27 11:03:03
【问题描述】:
可以使用/ 运算符在一行中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";
我错过了什么吗?这种不一致是否有原因?
【问题讨论】:
-
不。没有别的办法
-
@KamilCuk 不能使用
const char[N],那就是auto p2 = p1 / "B" / (std::string("C") + ".d"); -
("C" + ".d")添加两个const char[2]s -
@KamilCuk 像“A”这样的字符串文字的类型是“const char[N]”,并且在使用运算符 + 时将转换为“const char*”,因此您要添加两个指针
"A"+"B" -
太棒了。
auto p2 = p1 / "B" / "C" += ".d";或auto p2 = p1 / "B" / (std::string() + "C" + ".d");:D 。这两个都在godbolt 中工作。note that in practice, "C" will most likely不是在实践中,无论如何p1 / "B" / "C"的结果类型为std::filesystem::path,所以它在上面做+=。不过,这不是一个答案,因为我不知道“这种不一致的原因”。
标签: c++ std-filesystem