【发布时间】:2014-12-15 06:17:00
【问题描述】:
有没有办法使用数组的初始花括号值将数组传递给函数?
例如:
void doSomething(?)
{
array[5] = ?;
}
int main()
{
doSomething({1,2,3,4,5});
return 0;
}
顺便说一句,我认为我不能在 VS 2012 中包含 initializer_list,我不相信它存在。据说我听说它对这些情况很有用。
【问题讨论】:
有没有办法使用数组的初始花括号值将数组传递给函数?
例如:
void doSomething(?)
{
array[5] = ?;
}
int main()
{
doSomething({1,2,3,4,5});
return 0;
}
顺便说一句,我认为我不能在 VS 2012 中包含 initializer_list,我不相信它存在。据说我听说它对这些情况很有用。
【问题讨论】:
您不能在 VS 2012 中包含 initializer_list,因为它在该版本中不可用。微软在 VS2013 中添加了它。见http://msdn.microsoft.com/en-us/library/vstudio/hh567368(v=vs.120).aspx
【讨论】:
List initialization 仅从 C++11 开始可用。将花括号初始化列表作为函数参数传递会尝试列表初始化相应的参数。因此,任何可以列表初始化的类型都将是您案例的有效参数类型。特别是,聚合类型、initializer_list-constructible 类型和具有与花括号初始化列表中的类型匹配的构造函数的类型(仅限非缩小转换)将起作用。
以下是doSomething 的一些可能签名:
void doSomething(initializer_list<int>);
void doSomething(vector<int>);
struct Agg
{
int a,b,c,d,e;
};
void doSomething(Agg);
struct Constructible
{
Constructible(int, int, int, int, int);
};
void doSomething(Constructible);
【讨论】: