我是使用初始化列表的新手,我想知道它们是否与其他 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 会是更好的选择吗?
Thanks!
当我尝试时,我得到这些错误 http://ideone.com/VyzSZH。然而,当我摆脱你毫无意义地使用参考资料时,一切正常。 http://ideone.com/bxQMnQ
std::initializer_list
stores values,不是参考文献。你应该采取const std::initializer_list<T> &
, not a const std::initializer_list<T&> &
.
我想做的就是编写一个函数,该函数通过引用接受任意数量的参数,并返回对其中最大参数的引用。
[...]
这可以用initializer_lists实现吗?
No. std::initializer_list
is for values,不是参考文献。但我认为你没有理由不能按价值而不是按引用来获取这些项目。或者,更重要的是,你为什么不直接使用std::min,它可以采用初始化列表 http://en.cppreference.com/w/cpp/algorithm/min?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)