如何在不发生突变的情况下连接到 c++ 路径?

How do I concat to c++ path without mutating?

提问人:Tobi Akinyemi 提问时间:7/29/2020 最后编辑:Tobi Akinyemi 更新时间:7/29/2020 访问量:276

问:

我以为我找到了正确的功能:做一些类似的事情std::filesystem::path::concat

auto b = path(C:a/b); 
const auto c = b.concat(/c);

c具有正确的值,但发生了变异(最终等于 )。bc

我想不受影响。根据文档,相当于 .但是,没有.bconcatoperator+=operator+

我认为这是一个奇怪的设计,因为有类似的 and where 表示子目录而不是文字 concat(如)。operator/=operator//+=

我可以在没有类似的东西的情况下做这个非突变的 concat 吗?const auto c = std::filesystem::path(b.string() + "/c")

C++ 文件系统 标准

评论

1赞 cdhowie 7/29/2020
顺便说一句,你总是可以使用一个免费的功能来处理这个问题:template <typename T> std::filesystem::path concat_path(std::filesystem::path p, T && arg) { p += std::forward<T>(arg); return p; }
0赞 Tobi Akinyemi 7/29/2020
@FredLarson我谈到了问题的区别,附加为子目录,但是一个文字路径 concat/+= (concat)
0赞 Fred Larson 7/29/2020
@TobiAkinyemi:是的,我现在明白了。不好意思。
0赞 cdhowie 7/29/2020
@TobiAkinyemi 参数按值传递(因此被复制)。所以与 .( 未发生突变。pauto a = concat_path(b, c);auto a = b; a += c;b
1赞 Miles Budnek 7/29/2020
@TobiAkinyemi 请参阅此问题此 LWG 缺陷。基本上,(标准版本所基于的)没有,委员会不想添加一个,因为这会使界面更加复杂。boost::filesystem::pathoperator+

答: 暂无答案