编译器如何处理<Type> <Type> 具有多参数的向量initializer_list


class Complex{
public:
Complex(int a, int b): real(a), imag(b){}
~Complex(){}
private:
int real;
int imag;
};
int main()
{
vector<Complex> vec1 {1,2,3,4}; //Why can't be recognize in C++11
vector<Complex> vec2 {{1,2},{4,6}};
}

看上面的代码,我定义了一个类Complex,它在构造函数中需要2个参数。然后我定义了2个向量,为什么vec1不能被识别,编译器不能将其视为vec1{{1,2},{3,4}}?

std::vector<Complex> v{1, 2, 3, 4}是一个试图将initailizer_list<int>传递到向量构造中的语句。这显然是一个错误。当您使用{ {1, 2}, {3, 4} }时,它会诱使初始化器列表构造一组Complex类,以传递到您的向量中。

最新更新