给出以下代码:
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
int main()
{
fs::path fsBase = "/base";
fs::path fsAppend = "/append";
auto fsResult = fsBase / fsAppend;
std::cout << "fsResult: " << fsResult << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
通常,预期的结果是/base/append,但它实际上给出了/append。
fs::path::append的描述确实表明了这种行为:
如果 p.is_absolute() || (p.has_root_name() && p.root_name() != root_name()),然后用 p 替换当前路径,就像用 operator=(p) 并完成一样。
然而,行为std::experimental::filesystem和boost::filesystem不同的是,这给了预期/base/append。请参阅示例。
问题是为什么它会这样?为什么用append()函数替换路径?