精华内容
下载资源
问答
  • C++11初始化列表与参数列表作用

    千次阅读 2016-12-20 16:18:18
    对于构造函数而言,初始化列表作用无非是在对成员变量申请内存时进行初始化。执行构造函数时,先执行初始化表的内容,若初始化里面里面没有数据,侧编译器安装系统默认的方式对成员变量申请内存,进行系统默认的...

    最近遇到了一个程序,一开始有些莫名其妙,最后经过思考、猜想、验证的过程,将其总结如下:

    首先先上代码:

    函数声明如下:

    class Controller
    {
        using AnalysisManager   = NST::analysis::AnalysisManager;
        using FiltrationManager = NST::filtration::FiltrationManager;
    
        class Running
        {
        public:
            inline Running(Controller&);
            Running()               = delete;
            Running(const Running&) = delete;
            Running& operator=(const Running&) = delete;
            inline ~Running();
    
        private:
            Controller& controller;
        };
    
    public:
        Controller(const Parameters&);
        Controller(const Controller&) = delete;
        Controller& operator=(const Controller&) = delete;
        ~Controller();
    
        int run();
    
    private:
        // initializer for global outptut
        utils::Out::Global gout;
        // initializer for global logger
        utils::Log::Global glog;
    
        // storage for exceptions
        RunningStatus status;
    
        // signal handler
        SignalHandler signals;
    
        // controller subsystems
        std::unique_ptr<AnalysisManager>   analysis;
        std::unique_ptr<FiltrationManager> filtration;
    };

    只看其构造函数:

    Controller::Controller(const Parameters& params) try
        : gout       {utils::Out::Level(params.verbose_level())}
        , glog       {params.log_path()}
        , signals    {status}
        , analysis   {}
        , filtration {new FiltrationManager{status}}
    {
        // clang-format on
        switch(params.running_mode())
        {
        case RunningMode::Profiling:
        {
            analysis.reset(new AnalysisManager{status, params});
            if(analysis->isSilent())
                utils::Out::Global::set_level(utils::Out::Level::Silent);
    
            filtration->add_online_analysis(params, analysis->get_queue());
        }
        break;
        case RunningMode::Dumping:
        {
            filtration->add_online_dumping(params);
        }
        break;
        case RunningMode::Analysis:
        {
            analysis.reset(new AnalysisManager{status, params});
            if(analysis->isSilent())
                utils::Out::Global::set_level(utils::Out::Level::Silent);
    
            filtration->add_offline_analysis(params.input_file(),
                                             analysis->get_queue());
        }
        break;
        case RunningMode::Draining:
        {
            filtration->add_offline_dumping(params);
        }
        break;
        }
        droproot(params.dropuser());
    }

    对于上述的构造函数,涉及到的几个知识点总结如下:

    一:C++11特性初始化参数列表

    C++11引入了一个新的初始化方式,称为初始化列表(List Initialize),具体的初始化方式如下:

    int i = {1};
    int j{3};

    初始化列表在使用的时候有如下一些要求:

    1. 当初始化内置基本类型的时候,列表初始化不允许出现隐式类型的转换,例如:

    long double ld = 3.1415926536;
    int a{ld}, b = {ld}; //出错,不允许出现精度的丢失
    int c(ld), d = ld; // 非列表初始化,但是会出现精度的丢失

    2. 初始化列表可以用于初始化结构体类型,例如:

    #include <iostream>
    
    struct Person
    {
      std::string name;
      int age;
    };
    
    int main()
    {
    	Person p = {"Frank", 25};
    	std::cout << p.name << " : " << p.age << std::endl;
    }

    3. 其他一些不方便初始化的地方使用,比如std<vector>的初始化,如果不使用这种方式,只能用构造函数来初始化,难以达到效果:

    	std::vector<int> ivec1(3, 5);
    	std::vector<int> ivec2 = {5, 5, 5};
    	std::vector<int> ivec3 = {1,2,3,4,5}; //不使用列表初始化用构造函数难以实现

    二:初始化列表的作用

    对于构造函数而言,初始化列表的作用无非是在对成员变量申请内存时进行初始化。执行构造函数时,先执行初始化表的内容,若初始化里面里面没有数据,侧编译器安装系统默认的方式对成员变量申请内存,进行系统默认的方式赋值,随后再进行构造函数中花括号内部的指令。

    A.对于引用型成员变量和const常量型成员变量,则必须通过初始化表初始化该成员变量。
    B.如果有类类型成员变量,而该类型又没有无参构造函数,则必须通过初始化表初始化该成员变量。
    C.需要在子类中指定其基类部分的初始化方式,必须使用初始化表。
    D.成员变量初始化顺序有声明顺序决定,而与初始化表的顺序无关。
    E.对于参数列表中所列的成员变量,可以不包含所有的成员变量。

    三:delete的作用

    为了能够显式的禁用某个函数,C++11 标准引入了一个新特性:deleted 函数。程序员只需在函数声明后加上“=delete;”,就可将该函数禁用。类 X 的拷贝构造函数以及拷贝赋值操作符声明为 deleted 函数,就可以禁止类 X 对象之间的拷贝和赋值




    
    
    展开全文
  • 作用域插槽列表的简单应用实例

    千次阅读 2017-07-25 17:24:43
    作用域插槽列表的简单应用实例

    代码如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="vue.js"></script>
        <!--注意 vue.js的路径、-->
    </head>
    <body>
    
    <div id="app">
    <child :items="items">
        <template slot="item" scope="props">
            <!--必须存在的具有 scope属性的 template元素(作用域插槽的模板),
            props临时的变量名称,接受子组件中传递的props对象-->
            <!--slot = “item”是具名 slot的用法。-->
            <li>
                {{props.tex}}
                <!--引用子组件中绑定的tex属性值。-->
            </li>
        </template>
    </child>
    </div>
    
    
    <script>
        Vue.component('child',{
            props:["items"],
            template:'<ul><slot name="item" v-for="item in items" v-bind:tex="item.text"></slot></ul>'
        });
    
    new Vue({
        el:'#app',
        data:{
            items:[
                {text:'实例1'},
                {text:'实例2'},
                {text:'实例3'},
                {text:'实例4'},
                {text:'实例5'},
                {text:'实例6'}
            ]
        }
    })
    </script>
    </body>
    </html>

    渲染输出的结果是:

    <div id="app">
        <ul>
            <li>实例1</li>
            <li>实例2</li>
            <li>实例3</li>
            <li>实例4</li>
            <li>实例5</li>
            <li>实例6</li>
        </ul>
     </div>
    展开全文
  • 初始化列表作用

    千次阅读 2014-08-23 18:34:58
    冒号这种初始化方法,也叫做,初始化列表,也就是变量初始化的时候调用的 意味着,在一个类当中,一个成员变量只能在初始化赋值。 比如: const, 比如引用&。 举个例子: class A { public: A()

    我纠结的问题都在primer上有很好的解答


    之前突然想到,为什么要存在冒号这种初始化方法,在google被墙,没办法只能求助于度娘。。。


    冒号这种初始化方法,也叫做,初始化列表,也就是变量初始化的时候调用的

    意味着,在一个类当中,一个成员变量只能在初始化赋值。

    比如: const, 比如引用&。


    举个例子:

    class A
    {
    public:
       A(i)
       {
            a = i;
            b = i;
            c = i;
       }
    
    private:
       int a;
       const int b;
       int &c;
    };

    这样是不合法的, 因为b, c只能在初始化时赋值。


    所以,只能如此初始化:

    class A
    {
    public:
       A(int i):a(i), b(i), c(i){}
    
    private:
       int a;
       const int b;
       int &c;
    };


    还有一个比较重要的问题,就是初始化列表的初始化顺序是怎样的?

    class A
    {
    public:
    	A():b(a-1), a(b-1)
    	{
    		cout<<b<<endl;
    		cout<<a<<endl;
    	};
    
    private:
    	int a;
    	int b;
    };
    
    也就是说,a和b的值分别是多少?

    1
    -858993461

    答案就是,初始化列表里的顺序,与初始化顺序无关

    这里首先定义的是a,所以a先初始化为b - 1即 -858993460 - 1,-858993461

    而b是第二个定义的,所以后初始化b为a- 1即-858993461,为-858993462


    如果,没有必要的情况下,还是少用初始化列表,尽量在构造函数中顺序的定义。



    展开全文
  • Vue中使用列表循环Key的作用

    千次阅读 2019-11-09 21:27:33
    作用:可以高效渲染虚拟DOM树。 使用V-for更新已渲染的元素列表时,默认采取的方法是就地更新 我在这里打个栗子。我想把F元素插入到A B C D E中。 你以为他是这么插的。 其实他是这么插的 第一个原来是A...

    开头直奔主题
    作用:用唯一标识标记每一个节点,可以高效渲染虚拟DOM树。

    你面试直接答这两句,打的面试官一愣一愣。

    使用V-for更新已渲染的元素列表时,默认采取的方法是就地更新

    我在这里打个🌰。我想把F元素插入到A B C D E中。

    你以为他是这么插的。

     

    其实他是这么插的

    第一个原来是A,更新之后还是A,所以就不变,第二个是B,更新之后还是B,所以还是不变,第三个是C,更新之后变成了F。

    变了所以第三个C变成了F。然后后面的都变化了。

    效率很低。因为每一个元素没有唯一标识符。在编译器看来他们都是一样的。

    但是如果给每一个列表渲染的元素加上了唯一标识符。列表更新之后,编译器通过标识符知道第一个元素是A。第三个是C,就不会更新成F。就像下图。

     

    最后首尾呼应key的作用

    可以高效渲染虚拟DOM树。
     

    vue和react的虚拟DOM的Diff算法大致相同,其核心是基于两个简单的假设:

    1. 两个相同的组件产生类似的DOM结构,不同的组件产生不同的DOM结构。
    2. 同一层级的一组节点,他们可以通过唯一的id进行区分。基于以上这两点假设,使得虚拟DOM的Diff算法的复杂度从O(n^3)降到了O(n)。

    diff1.jpg
    如果dom树有三层,在没加ID的情况下。

    先比较第一层。比较一次

    再比较第二层。比较第一层第一个节点和第二层第一个节点,第一层第一个节点和第二层第二个节点,比较第一层第一个节点和第二层两个节点。比较了四次。

    算法复杂度。2的n次方。

    如果加上ID。比较第一个节点。再比较第二个节点。再比较第三个节点。再比较第四个节点。再比较第五个节点。一直比到第n个节点。算法复杂度为n。

     

     

    展开全文
  • 答:证书吊销列表 (Certificate Revocation List ,简称: CRL) 是 PKI 系统中的一个结构化数据文件,该文件包含了证书颁发机构 (CA) 已经吊销的证书的序列号及其吊销日期。 CRL 文件中还包含证书颁发机构信息、吊销...
  • 构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。例如: class CExample { public: int a; float b; //构造函数初始化列表 CExample(): a(0),b...
  • python 列表的中括号[]与冒号:的作用

    万次阅读 2018-10-04 03:03:13
    python 列表的中括号[]与冒号:的作用   中括号[ ]:用于定义列表或引用列表、数组、字符串及元组中元素位置 list1 = ['physics', 'chemistry', 1997, 2000] list2 = [1, 2, 3, 4, 5, 6, 7 ] print "list1...
  • c++中构造函数有初始化列表
  • C++关于类成员函数在参数列表后加const的作用,以及使用条件
  • 中括号[ ]:用于定义列表或引用列表、数组、字符串及元组中元素位置list1 = ["physics", "chemistry", 1997, 2000]list2 = [1, 2, 3, 4, 5, 6, 7 ]print "list1[0]: ", list1[0]print...
  • 此为C# 3.0新加入的特性 ...作用是可以动态的向某个类添加静态函数 比如 namespace ExtensionMethods { public static class MyExtensions { public static int WordCount(this String str) { return str.
  • #join 将列表转为字符串 split将字符串转为列表 #join 不适用于包含了int类型的列表,格式是 str.join(可迭代对象),注意int类型不是可迭代对象 #join 返回的就是字符串 li = ['test','...
  • Python:列表 【全用法】

    万次阅读 多人点赞 2019-07-02 09:31:28
    python中有列表、元组、集合、字典这四种可以存放多个数据元素的集合,他们在总体功能上都起着存放数据的作用,却都有着各自的特点。本片文章中我们会对列表的用法做详细说明。 演示环境: python3.6 pycharm中的...
  • vue的v-for循环渲染列表时,解决没有:key警告问题(:key的作用) :key是为vue的响应式渲染提供方法,在列表中单条数据改变的情况下,可以进行单独渲染,减少页面资源消耗。  当前页面如果有列表渲染v-for,并且在...
  • 于是我换成了RecyclerView,结果效果还是一样,数据本来已经刷新了notifyDateSetChanged也执行了,但是列表里的展示还是不变,必须点一下手机屏幕,数据才能刷新出来。【notifyItemChanged()等也同理】 百度了一堆...
  • 无序列表

    千次阅读 2021-02-07 11:24:38
    无序列表作用: 给一堆数据添加列表语义,没有顺序之分 格式: <ul> <li>需要显示的条目内容</li> </ul> li是list item的缩写 list:列表 item:条目 结合起来就是列表条目的意思。 ul...
  • key的作用就是给每一个VNode一个唯一的key,通过key可以更准确更快的拿到VNode。 vue和react都是采用diff算法来对比新旧虚拟节点,从而更新节点。当新节点跟旧节点头尾交叉对比没有结果时,会根据新节点的key去对比...
  • Python列表推导式

    万次阅读 多人点赞 2019-05-18 00:51:24
    Python列表推导式 列表推导式是Python构建列表(list)的一种快捷方式,可以使用简洁的代码就创建出一个列表. 一、range()函数 python的range()函数可用来创建一个整数列表,一般用在 for 循环中. range()语法:...
  • 有序列表

    千次阅读 2018-08-27 16:49:23
    1.什么是有序列表 有先后之分的数据就叫有序列表 2.格式 &lt;ol&...作用:先通过dt标签定义列表中的所有标题,然后通过dd标签给每个标签添加描述信息 4格式: &lt;dl&gt;
  • ol,li,ul列表

    千次阅读 2021-08-15 10:39:32
    ol,li,ul列表一、ol li有序列表标签1.语法2.作用3.案例4.总结二、ul li 无序列表标签1.语法2.说明3.案例4.总结 一、ol li有序列表标签 1.语法 在html中布局使用最多标签为div, <ol> <li>内容一&...
  • 我们在使用sharepoint的过程中,发现一个比较好用的功能,就是“将此列表另存为模版”(save list as template),这个功能的作用是,创建一个和当前列表或者文档库一模一样的配置,例如字段或者文档类型。 在列表...
  • css实现下拉列表

    千次阅读 多人点赞 2019-09-06 14:02:25
    为什么要用下拉列表,因为有动态效果而且可看可不看的,我认为使用下拉列表对我们的页面有美化作用。 怎么实现? 首先思路就是使用display属性来进行控制,这是网页设计非常重要的属性之一。关于display属性,我们...
  • Python递归求出列表(包括列表中的子列表)中的最大值 要求:求出列表中的所有值的最大数,包括列表中带有子列表的。 按照Python给出的内置函数(max)只能求出列表中的最大值,无法求出包括列表中的子列表的最大...
  • JS List 列表

    千次阅读 2018-03-28 18:00:52
    数据结构 ...反之,如果数据结构非常复杂,列表作用就没有那么大了。 列表是一种最自然的数据组织方式,如果数据存储的顺序不重要,也不必对数据进行查找,那么列表就是一种再好不过的数据结构。 抽象...
  • FreeRTOS高级篇1---FreeRTOS列表列表

    万次阅读 多人点赞 2016-04-19 14:34:13
    FreeRTOS内核调度大量使用了列表(list)这一数据结构。我们如果想一探FreeRTOS背后的运行机制,首先遇到的拦路虎就是列表。对于FreeRTOS内核来说,列表就是它最基础的部分。我们在这一章集中讲解列表列表项的结构...
  • C++构造函数初始化列表

    万次阅读 2018-02-07 19:52:47
    何为构造函数初始化列表 class Sample { public: // 构造函数内部赋值 Sample(int a) { a_ = a; } // 构造函数初始化列表 Sample(int a) : a_(a) { } private: int a_; }; 上面的代码中,Sample类的2...
  • Python 列表和元组的区别是什么?

    千次阅读 2018-10-24 14:48:46
    答案是:它们之间有两点不同,并且二者之间有着复杂的相互作用。它们分别是”技术上”的差异和“文化上”的差异。 首先,有一点是相同的:列表与元组都是容器,是一系列的对象。 Python   1 2 3 ...
  • 然而当编写自定义下拉列表的时候,就会碰到一个问题:如果用户在下拉列表的范围外进行鼠标点击的操作,如何关闭已经打开的下拉列表? 解决思路如下:在 DOM 的根节点上添加一个 click 事件,同时下拉列表内阻止事件...
  • 要想看懂FreeRTOS 源码并学习其原理,有一个东西绝对跑不了,那就是FreeRTOS 的列表列表项。列表列表项是FreeRTOS 的一个数据结构,FreeRTOS 大量使用到了列表列表项,它是FreeRTOS 的基石。要想深入学习并...
  • Vue中key属性的作用

    万次阅读 多人点赞 2019-01-26 08:47:36
    Vue中key属性的作用列表渲染时使用key属性使用key属性强制替换元素 在列表渲染时使用key属性 相信大多数Vue开发者接触到key属性的时候是使用v-for进行列表渲染的时候,如果不使用key属性,Vue会产生警告,那么在这...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 988,231
精华内容 395,292
关键字:

列表作用