c++ - std::initializer_list<> 和一个引用参数

标签 c++ c++11 min initializer-list

我刚开始使用初始化列表,我想知道它们的工作方式是否与其他 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/

相关文章:

c++ - 如何设计一个具有相似功能但不同签名的方法的类

c++ - 我的数组中 Double 之前的主要表达式?

c - 如何在 C 中使用 C++ 类?

c++ - 具有转换函数的 lambda 到指向具有 C++ 链接的函数的指针

c - 数组的统计

c# 字典返回多个最小值最大值

c++ - 如何避免链接器错误

C++。将二维指针数组传递到函数时遇到问题

c++ - 关于 C++0x,我需要了解什么?

计算最小、最大和平均测试分数输入验证