我不明白为什么它不允许我使用以下语法直接初始化向量:
stl::vector<int> v{1, 2, 3};
我从头开始实现了向量和初始化列表类。
向量构造函数(还有一个默认构造函数,它将所有内容设置为 0):
vector(initializer_list<T> init) : m_capacity(init.size()), m_size(m_capacity), m_data(nullptr)
{
this->m_data = (T *)malloc(m_size * sizeof(T));
if (this->m_data == nullptr)
throw "malloc: Couldn't allocate memory!\n";
memcpy(m_data, init.begin(), m_size * sizeof(T));
}
这是我的initializer_list 类:
template <typename T> class initializer_list
{
public:
typedef const T* const_iterator;
typedef T* iterator;
private:
iterator m_begin;
size_t m_size;
constexpr initializer_list(const_iterator it, size_t size) noexcept : m_begin(it), m_size(size) { }
public:
constexpr initializer_list() noexcept : m_begin(nullptr), m_size(0) { }
constexpr const_iterator begin() const { return m_begin; }
constexpr const_iterator begin(initializer_list<T> init) noexcept { return init.begin(); }
constexpr const_iterator end() const { return m_begin + m_size; }
constexpr const_iterator end(initializer_list<T> init) noexcept { return init.end(); }
constexpr size_t size() const { return m_size; }
};
我在向量类中创建了一个单独的构造函数,它采用初始值设定项列表作为参数。但是我收到以下错误:
no instance of constructor "stl::vector<T>::vector [with T=int]" matches the argument list
std::initializer_list
是一个无法用用户代码实现的魔术类型。
重载解析和花括号初始化器列表的特殊行为仅专门针对该神奇的
std::initializer_list
类型。
您无法定义自己的
initializer_list
并希望它像 std::initializer_list
一样工作。