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

时间:2016-10-23 20:47:13

标签: 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);

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

1 个答案:

答案 0 :(得分:1)

就在这里,你现在有一个带括号的封装的initalizer列表:

require 'cowsay'
x = Cowsay.random_character().class
x.name.split("::")[2]
require 'cowsay'
true
x = Cowsay.random_character().class
Cowsay::Character::Stegosaurus
x.name.split("::")[2]
"Stegosaurus"

列表为: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); } here