5

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

谢谢!

4

1 回答 1

3

当我尝试它时,我得到了这些错误。然而,当我摆脱你对引用的毫无意义的使用时,一切都会奏效。

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

我要做的就是编写一个函数,该函数通过引用获取任意数量的参数,并返回对其中最大参数的引用。[...]这可能与initializer_lists吗?

No.std::initializer_list用于values,而不是 references。但我看不出你为什么不能按价值而不是按参考来获取这些项目。或者,更重要的是,你为什么不直接使用std::min, 它可以带一个初始化列表

于 2012-11-06T03:06:15.253 回答