我正在阅读有关初始化列表的信息,并在coliru
上尝试了以下代码#include <iostream>
#include <string>
#include <vector>
#include <initializer_list>
class dog
{
public:
int age;
dog(int a)
{
age = a;
std::string name;
}
dog(const iterator_list<int>& vec)
{
age = *(vec.begin());
}
};
int main()
{
return 0;
}
然而,似乎初始化列表构造函数
存在问题dog(const iterator_list<int>& vec)
{
age = *(vec.begin());
}
有什么建议吗?为什么会有问题?
答案 0 :(得分:1)
它汇编为:dog(const std::initializer_list<int>& vec)
答案 1 :(得分:1)
您应该使用std::initializer_list
,因为根据文档,这样的对象在以下情况下由编译器构造:
std::initializer_list
参数std::initializer_list
参数。所以你可以这样:
#include <iostream>
#include <string>
#include <vector>
#include <initializer_list>
class dog
{
public:
int age;
dog(int a)
{
age = a;
std::string name;
}
dog(const initializer_list<int>& vec)
{
age = *(vec.begin());
}
};
用于构造类,您可以像这样使用它:
dog d1( { 12, 16, 18, 20 } ); // if you will want more initialization data in the future
dog d2 = { 12 }; // or this, for now
,age
的值为12
您始终必须处理您的方法/类所属的命名空间:
std::initializer_list<int>
using namespace std;
另请注意,为了选择构造函数,默认值和initializer_lists
构造函数优先:
template<typename T>
struct Vector {
Vector(const std::initializer_list<T> &values);
Vector();
Vector(const int size);
Vector(const int size, const T& fill_with);
};
Vector<int> v1 {}; // empty list: the default constructor will be picked
Vector<int> v2 { 12 }; // the initializer_list constructor will be used
Vector<int> v3 (12); // Vector(const int) will be used
Vector<int> v4 (12, 0); // Vector(const int, const int&) will be used
请在repl.it上查看。