我刚开始使用初始化列表,我想知道它们的工作方式是否与其他 STL 容器相似。我的意思是他们复制值(value)观吗?我想做的是一个简单的 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 会是更好的选择吗?
谢谢!
最佳答案
当我尝试时,我得到 these errors .然而,当我摆脱你对引用文献的毫无意义的使用时,it all works.
std::initializer_list
存储值,而不是引用。你应该服用 const std::initializer_list<T> &
, 不是 const std::initializer_list<T&> &
.
All I'm trying to do is write a function that takes any number of arguments, by reference, and returns a reference to the largest of them. [...] Is this possible with initializer_lists?
没有。 std::initializer_list
用于值,而不是引用。但我看不出为什么你不能按值(value)而不是引用来获取这些项目。或者,更重要的是,你为什么不直接使用 std::min
, which can take an initializer list ?
关于c++ - std::initializer_list<> 和一个引用参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13243578/