std::initializer_list<> 和一个参考参数

use*_*683 5 c++ min initializer-list c++11

我是使用初始化列表的新手,我想知道它们是否与其他 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;
}
Run Code Online (Sandbox Code Playgroud)

但是,当我调用该函数时,我从 GCC 得到了这个:

error: 'const' qualifiers cannot be applied to 'int&'
Run Code Online (Sandbox Code Playgroud)

我一直在玩这个,似乎 initializer_lists 可能不会做我想要的;我希望该函数也能排除非 POD 参数。va_list 会是更好的选择吗?

谢谢!

Nic*_*las 4

当我尝试时,我收到这些错误。然而,当我摆脱你毫无意义地使用参考资料时,一切就都有效了。

std::initializer_list存储,而不是引用。你应该服用 a const std::initializer_list<T> &,而不是 a const std::initializer_list<T&> &

我想做的就是编写一个函数,该函数通过引用接受任意数量的参数,并返回对其中最大参数的引用。[...] 这可以用initializer_lists 实现吗?

编号std::initializer_list是用于,而不是参考。但我认为你没有理由不能按价值而不是按引用来获取这些项目。或者,更重要的是,为什么不直接使用std::min,它可以接受初始值设定项列表