为什么 boost::filesystem::path 和 std::filesystem::path 缺少 operator+?

Why do boost::filesystem::path and std::filesystem::path lack operator+?

考虑以下关于路径分解的断言,其中每个局部变量,例如stem 有明显的初始化,例如auto stem = path.stem()

assert(root_path == root_name / root_directory);
assert(path == root_name / root_directory / relative_path);
assert(path == root_path / relative_path);

assert(path == parent_path / filename);
assert(filename == stem + extension);

这一切都有效,除了最后一行 — 因为 fs::path 没有定义 operator+。它有 operator+=,但没有 operator+

这是怎么回事?


我确定我可以通过添加自己的 operator+ 来编译此代码。有什么理由不这样做吗? (注意这是在我自己的命名空间中;我不会重新打开 namespace std。)

fs::path operator+(fs::path a, const fs::path& b)
{
    a += b;
    return a;
}

我对这个问题的唯一假设是:

这是作为文件系统库的缺陷输入的,并且由于接口的复杂性和通过转换为字符串并返回路径来变通的能力,它被判断为不是缺陷。在这里阅读所有相关信息:https://timsong-cpp.github.io/lwg-issues/2668