c++ - 在 C++ 中使用未声明的列表作为参数

标签 c++

最近通过完成 checkio.org 的“任务”开始学习 C++。我现在的主要问题是验证解决方案,所以我想像这样使用 assert() :

assert(index_power({1, 2, 3, 4}, 2) == 9);

问题是我总是收到错误提示:

error: cannot convert ‘<brace-enclosed initializer list>’ to ‘int*’ for argument ‘1’ to ‘int index_power(int*, int)’  
assert(index_power({1, 2, 3, 4}, 2) == 9);

有没有办法将未声明的数组作为函数参数传递,或者每次我想像这样使用断言时都必须声明新数组??

最佳答案

在这里,您现在有一个大括号括起来的初始化程序列表:

assert(index_power({1, 2, 3, 4}, 2) == 9);

列表是:{1, 2, 3, 4} 。要允许这个大括号括起来的初始化列表,你需要使用允许这个方法的库。例如 std::vector。所以你可以改变你的论点:

int index_power(int* args, int num);

int index_power(std::vector<int>, int num);

如果您对如何制作自定义的大括号封闭初始化构造函数感兴趣,您可以使用 std::initalizer_list:

MyClass(std::initializer_list<int> li) {
  std::vector<int> v(li);
}

你可以看到更多关于std::initalizer_list here .

关于c++ - 在 C++ 中使用未声明的列表作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40207631/

相关文章:

c++ - 基本类型的 static_cast<T> 与 T(n)

c++ - 拖动时QGraphicsPolygonItem不更新QPolygonF坐标

c++ - 如何初始化作为 c++11 中的类成员的静态 const vector ?

c++ - c++中异步线程的实现

c++ - 简单的字符串操作

c++ - 未成功分配给指针

c++ - 3D vector (X、Y、Z)查看 vector

c++ - 我应该对(数组索引)范围使用什么类型?

c++ - 具有不同输入的循环

c++ - VS2012 LibRTMP包含c到c++