如果我想使用“a = {x,y};”,那么要重载哪个运算符

时间:2013-05-03 11:30:05

标签: c++ overloading operator-keyword

我正在制作自己的课程,我希望能够像标题一样启动它。

a = {x, y};

我无法找到任何指示我如何做到这一点。

2 个答案:

答案 0 :(得分:5)

假设您确实希望能够以这种方式分配(而不是初始化),则需要重载operator=,但其参数类型完全取决于大括号中的列表所代表的内容。

例如,如果您总是要传递一对值,那么您可以operator=重载,需要std::pair

A& operator=(std::pair<int, int>);

这可以这样调用:

A a;
a = {5, 3};

如果您希望能够传递任意长度列表,可以将参数类型设为std::initializer_list

A& operator=(std::initializer_list<int>);

现在以下所有情况都可以:

a = {};
a = {1, 2};
a = {5, 3, 5, 2, 3};

答案 1 :(得分:1)

从C ++ 11开始,您可以通过使用 std :: initializer_list 模板类作为参数创建构造函数来实现,并且可以重载 operator = 类似的方式。我不知道C ++ 03或C ++ 98中有什么技巧可以做到这一点。

来自维基百科的

Copypasta:

class SequenceClass {
public:
    SequenceClass(std::initializer_list<int> list);
};