【发布时间】:2014-10-08 15:08:38
【问题描述】:
我正在做一个学校项目,我将在其中构建一个自定义矢量类。 并且该类应该能够以几种不同的方式初始化向量。 我被这个向量的 initializer_list 初始化卡住了。
唯一允许作为元素的值是无符号整数。
标题
#include <initializer_list>
class myvec {
private:
unsigned int *arr; //pointer to array
std::size_t n; //size of myvec
public:
myvec(); // Default contructor
myvec(std::size_t size); // Creating a vec with # of element as size
myvec(const myvec&); // Copy constructor
myvec(const initializer_list<unsigned int>& list);
cpp
#include "myvec.h"
#include <initializer_list>
myvec::myvec() {
arr = new unsigned int[0];
n = 0;
}
myvec::myvec(std::size_t size) {
arr = new unsigned int[size];
n = size;
}
myvec::myvec(const myvec& vec) {
arr = new unsigned int[vec.n];
n = vec.n;
for (int i = 0; i < vec.n; i++) {
arr[i]=vec.arr[i];
}
}
myvec::myvec(const std::initializer_list<unsigned int> list) {
}
我不明白应该如何编写构造函数才能使其工作?在网上找了很久没有成功。
我想从另一个 c++ 文件中调用 initializer_list 构造函数 测试.cpp
myvec a = {1,2,3,4};
【问题讨论】:
-
制作 1-argument-ctors
explicit除非你知道为什么不这样做。 -
std::initializer_list不需要通过引用传递。它是一种奇怪的类型,它存储对临时数组的引用,并且通常按值传递。 -
声明和定义也不匹配
-
无关:当我看到类似的东西时,我永远不会感到困惑:
arr = new unsigned int[0];
标签: c++ c++11 vector constructor initializer-list