的std :: initializer_list<>和参考参数

时间:2012-11-06 02:42:55

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

我是新手使用初始化程序列表,我想知道它们是否与其他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会更好吗?

谢谢!

1 个答案:

答案 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