我是新手使用初始化程序列表,我想知道它们是否与其他stl容器类似。我的意思是他们复制价值观吗?我想要做的是一个简单的min()函数,如下所示:
template <class T> T& minArgs(const std::initializer_list<T&>& Arguments)
{
const T* Smallest = Arguments.begin();
for (const T* I = begin(Arguments); I != end(Arguments); ++I)
{
if (*I < *Smallest) Smallest = I;
}
return *Smallest;
}
然而,当我调用该函数时,我从GCC得到了这个:
error: 'const' qualifiers cannot be applied to 'int&'
我一直在玩这个,似乎initializer_lists可能不会做我想要的;我想要除了非POD参数之外的函数。 va_list会更好吗?
谢谢!
答案 0 :(得分:3)
当我尝试时,我得到these errors。然而,当我摆脱你对引用的毫无意义的使用时,it all works.
std::initializer_list
存储值,而不是引用。您应该使用const std::initializer_list<T> &
,而不是const std::initializer_list<T&> &
。
我所要做的就是编写一个函数,通过引用获取任意数量的参数,并返回对其中最大参数的引用。 [...] 初始化列表是否可以实现?
没有。 std::initializer_list
用于值,而不是引用。但我认为你没有理由不按价值取代物品而不是参考物品。或者,更重要的是,为什么不使用std::min
, which can take an initializer list?