我可以使用operator<<将元素添加到列表中?

时间:2017-10-30 18:19:25

标签: c++ list operator-overloading

我想重载运算符<<将元素添加到列表中。

std::list<int> foo (3,100);   // three ints with a value of 100

如果我输入

foo << 2 << 3 << 4;

然后列表变为100,100,100,2,3,4。 我知道有很多功能可以做这个实现,现在我正在学习运算符重载,所以我很好奇是否可以这样做,如果是的话怎么做? (我想使用&lt;&lt;来添加元素,不需要cout。)

1 个答案:

答案 0 :(得分:2)

你表面上会写这样的功能(Tested on Ideone.com):

template<typename T>
std::list<T> & operator<<(std::list<T> & list, T val) {
    list.emplace_back(std::move(val));
    return list;
}

所以唯一突出的问题是你需要这样做,我认为答案是你不应该和不, 以该顺序。通常最好不要尝试修改/添加STL容器的默认行为,因为这样做会导致意外行为。

如果你想要一个可以用这种语法插入的列表,至少你应该自己动手(你可以使用std::list作为后备数据结构,以节省必须编写样板代码)这样​​就不会混淆STL容器在代码中的行为方式。

编辑:

因为我知道在这一点上会有一些混乱:用户覆盖流的<<运算符是相当常见的。这不被认为是不好的做法的原因是std::ostream已经对许多对象(基本类型和库对象)都有<<重载,并且重载{{1}更自然这个对象类比容器对象。当然,所有这些都取决于个人情况。