C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了C 11的构造函数中的花括号参数是什么大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > C++11 Fun with initializer lists,arrays,and enumerations5个
我从一些算法书籍中读到了一个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}),这是什么?它将矢量调整为容量上限? (显然,代码的作者打算在构造数据时给出数据大小.)

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

解决方法

这是统一初始化,一个新的C 11功能.但是,它可以说是在你的例子中以正确的方式使用.它应该是:
Queue(const size_t &cap=8) : head(0),data(cap) {}
//                                                        ^^^^^

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

data{cap}

或者这样:

data({cap})

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

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

#include <vector>

struct X
{
    X(int s) : v1({s}),v2{s},v3(s) { }
    std::vector<int> v1;
    std::vector<int> v2;
    std::vector<int> v3;
};

#include <iostream>

int main()
{
    X x(42);
    std::cout << x.v1.size() << std::endl; // Prints 1
    std::cout << x.v2.size() << std::endl; // Prints 1
    std::cout << x.v3.size() << std::endl; // Prints 42
}

大佬总结

以上是大佬教程为你收集整理的C 11的构造函数中的花括号参数是什么全部内容,希望文章能够帮你解决C 11的构造函数中的花括号参数是什么所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: