我遇到了类似的问题。
int j = 6;
int *k = new int[j]{4};
警告是:
warning: non-constant array size in new, unable to verify length
of initializer-list [enabled by default]
我只遇到警告,没有错误,我使用 -std=gnu++11 运行
另外,我希望为每个实例调用构造函数。如果我打印数组值,所有
最佳答案
问题正是编译器告诉你的。
维度仅在运行时已知,因此您只能使用运行时功能,例如:
std::vector<int> v(j, 4);
// `v` contains `j` ints, all initialised to `4`
如果您有一个无法默认构造的元素类型,您可以就地构造元素:
std::vector<T> v;
v.reserve(j);
for (size_t i = 0; i < j; i++)
v.emplace_back(ctor-args-here);
您也可以使用初始化列表:
std::vector<T> v{
T(ctor-args-here), T(ctor-args-here), T(ctor-args-here),
T(ctor-args-here), T(ctor-args-here), T(ctor-args-here)
};
对象将被移动,最坏的情况是被复制。
这里的要点是 vector 元素不需要是可默认构造的。
(不幸的是,我不知道没有循环或代码重复的方法。)
关于c++ - 警告 : non-constant array size in new, 无法验证初始化列表的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14712802/