你能解释一下 STL 容器如何处理带有空初始化列表的赋值运算符吗?
当我会做这样的事情时:
vector<int> v;
v = { };
被调用的函数不是:
vector& operator= (initializer_list<value_type> il);
但:
vector& operator= (vector&& x);
另一方面,当我对自己的班级做类似的事情时:
struct A {
A& operator= (const A&) { return *this; }
A& operator= (A&&) { return *this; }
A& operator= (initializer_list<int>) { return *this; }
};
/* ... */
A a;
a = { };
该代码无法在 VS2013 上编译,并说:
error C2593: 'operator =' is ambiguous
如果列表不为空,它工作正常,它只是调用带有初始化列表的函数。只有当列表为空时才会出现问题,在向量上它调用右值赋值运算符,在我的类上它给出错误。
在向量和其他容器中如何处理这种情况?