如何编译治疗载体这具有多PARAMATERS
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}};
}
看看上面的代码的initializer_list,我定义一个类复杂的,它需要在构造函数中2 PARAM。然后我定义了2个矢量,为什么vec1不能被识别,编译器不能把它当作vec1 {{1,2},{3,4}}?如何编译治疗载体<Type>这<Type>具有多PARAMATERS
std::vector<Complex> v{1, 2, 3, 4}
是一条声明,它试图将initailizer_list<int>
传递到向量的构造中。这显然是一个错误。当您改为使用{ {1, 2}, {3, 4} }
时,它会哄骗初始化程序列表以构建一组Complex
类以传入您的向量。
我不相信你的第一个主张是真实的。 – Yakk
'v {1,2,3,4}'不会尝试使用'initializer_list
我同意Praetorian。 复数(int a,int b = 0):real(a),imag(b){} 如果我写这样的构造函数,默认为imag,那么vec1是有效的,所有的元素都是{ 1,0},{2,0},{3,0},{4,0}, ,它进入Complex构造函数。 但我只是想知道为什么编译器不会分配第一个2参数{1,2}复杂构造函数,如复杂(1,2)。 –
简短的答案是因为C++不能这样工作。 –
即使在人类中混淆的可能性也很大。对于不经意的读者,应该是(1,0),(2,0),(3,0),(4,0)? (1,2),(3,4)?第二个强迫你写出你的意思,这是值得的黄金重量。 – user4581301
但实际上,Complex构造函数需要2个参数,我告诉向量的类型是,为什么编译器不能将{1,2}分配给Complex1,{3,4}到vec1中的Complex2? –