我有一个看起来像这样的类:
class A {
public:
A() {};
A& operator<< (A& a, unsigned int i);
private:
vector<int> abc;
}
我想提供向 abc
添加对象的功能使用运算符:
A a();
a << 3,4,5; // should do the same as several calls of abc.push_back(i)
我知道我必须重载 <<
运算符,我是否还必须重载 ,
运算符(operator)?
实际的方法会是什么样子?
最佳答案
永远、永远、永远不要重载 C++ 中的 ,
运算符。该语言允许这样做,但您不能这样做并保留运算符(operator)的预期行为。 (特别是,逗号运算符在 C++ 中是一个序列点:编译器保证左侧表达式将在右侧表达式之前求值。如果重载它,将不再保证将求值哪个表达式首先。)
您想使用流插入运算符的多次调用来插入多个对象。
(为完整起见:永远不要重载的其他 C++ 运算符是 &&
和 ||
。同样,不可能提供客户端代码期望的行为(简称电路,在这种情况下))。
关于c++ - 重载 operator<< 改变成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16884441/