C ++ 11的构造函数中的花括号参数是什么

时间:2013-04-08 15:50:13

标签: c++ c++11

我从一些算法书籍中读到了一个Queue的实现,有一个对我来说是新的/有趣的片段,我不明白。我认为它是像C ++ 11中的向量初始化列表一样的新东西,但由于代码的上下文,我不是那么自信。任何人都可以曝光或提供一些参考吗?

template <typename T>
class Queue {
    private:
        size_t head, tail, count;
        vector<T> data;
    public:
        Queue(const size_t &cap=8) : head(0),tail(0),count(0),data({cap}) {}
        //... more interfaces
        //...
}

可疑部分是数据({cap}),这是什么?它将矢量调整为容量上限? (显然,代码的作者打算在构造数据时给出数据大小。)

编辑: 在阅读完第一个答案并进行测试后,我们知道该书在代码段中有错误。它打算给出一个初始上限,但它使用了错误的{}。

1 个答案:

答案 0 :(得分:4)

这是统一初始化,一种新的C ++ 11功能。但是,它可以说是在你的例子中以正确的方式使用。它应该是:

Queue(const size_t &cap=8) : head(0),tail(0),count(0),data(cap) {}
//                                                        ^^^^^

因为目的是调用接受向量初始大小的std::vector<>构造函数。以这种方式调用它:

data{cap}

或者这样:

data({cap})

使构造函数接受std::initializer_list被选中(初始化列表是C ++ 11的另一个新特性,与大括号初始化紧密相关),导致向量初始化为一个元素,其值为{{ 1}}。

您可以在此live example中验证上述声明(代码在下面报告):

cap