gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 23:02:38 26 4
gpt4 key购买 nike

考虑以下关于路径分解的断言,其中每个局部变量,例如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;
}

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

  • 也许设计者担心 operator+ 太容易与 std::stringoperator+ 混淆。但这似乎很愚蠢,因为它在语义上做了完全相同的事情(那么为什么要关心它是否被混为一谈呢?)。而且当他们设计 path.append("x") 来做一些语义上不同str .append("x")path.concat("x") 做一些语义上的事情相同 str.append("x ").

  • 也许path 的隐式转换operator string_type() const 会导致一些不同的p + q 变得模糊。但我一直想不出这样的案例。

最佳答案

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

关于c++ - 为什么 boost::filesystem::path 和 std::filesystem::path 缺少 operator+?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46137433/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com