使用重载 << 运算符作为 push_back 是个好主意吗?

Is using the overloading << operator as push_back a good idea?

我一直在练习运算符重载以便更好地理解它,我遇到了使用 << 运算符和这样的向量:

void operator<<(std::vector<int> &vector, int value){
    vetor.push_back(value);
}

现在我知道这不是一个好主意,我应该避免这样做,但我想听听在该主题上更有经验的人的意见,以帮助我理解 <<运算符和 ostream class 以更好的方式。

Now I know that this isn't really a good idea and that I should avoid doing this

你的知识是正确的。这有两个问题:

  • 定义不涉及您自己的类型的运算符是个坏主意。从技术上讲,该标准不保证将来不会添加全局 operator<<(std::vector<int> &, int),这会破坏定义此类重载的程序的前向兼容性。

    此外,具有相同坏主意的库程序员可能会做出相同的决定,从而破坏与您的程序的兼容性。这使得这样的想法对库代码非常不利。

  • 与函数不同,运算符没有描述它们的名称,因此根据经验,为了使程序易于理解,运算符重载最好实现与其 built-in同行。

    标准库中有违反此经验法则的先例,例如字符输出流插入运算符和范围适配器管道运算符。这种方法增加了一个操作员表示不同事物的数量,不应掉以轻心。