首页 > 其他分享 >构造函数初始化列表 的好处

构造函数初始化列表 的好处

时间:2024-09-27 15:26:45浏览次数:10  
标签:初始化 Point int 列表 构造函数 赋值

初始化类成员的两种方式:(1)使用初始化列表;(2)在构造函数体内进行赋值操作。

class Point
{
    public:
        Point(int xx, int yy) : x(xx), y(yy)
        {
            cout << "Constructor of Point" << endl;
        }
 
    private:
        float x, y;
};
class Point
{
    public:
        Point(int xx, int yy)
        {
            x = xx;
            y = yy;
            cout << "Constructor of Point" << endl;
        }
 
    private:
        float x, y;
};

但严格来说,上面两段代码只是能实现相同的功能(初始化Point类的对象),它们的本质并不相同,下面来说明原因。

构造函数的执行分为两个阶段:

(1)执行初始化列表:初始化类中的数据成员;

(2)执行构造函数体:一般是对类中的数据成员进行赋值操作。

初始化与赋值是不同的,所以上面两段代码只是功能上相同,但本质并不相同,前一个是初始化,后一个是赋值。

构造函数初始化列表*

. 提高效率,避免不必要的默认构造

通过构造函数初始化列表,成员变量在对象构造时直接用传递进来的值进行初始化,避免了先调用默认构造函数然后再赋值的过程

  • 构造函数体内赋值
    当你在构造函数体内赋值时,类的成员变量会先使用默认构造函数进行初始化,然后再在构造函数内部进行赋值。对于复杂的类,这样可能会引入不必要的性能开销。

  • 初始化列表赋值
    初始化列表会直接调用对应的构造函数进行初始化,从而避免了对象的重复初始化,提升了性能。

示例:

class SkipList {
    Compare compare;
public:
    // 使用初始化列表进行初始化
    SkipList(Compare cmp) : compare(cmp) {}
};

在这种写法中,compare 成员变量在对象创建时就直接用 cmp 来初始化,而不是先调用 Compare 类的默认构造函数,再在构造函数体内赋值

标签:初始化,Point,int,列表,构造函数,赋值
From: https://www.cnblogs.com/niumachen/p/18435803

相关文章

  • PbootCMS文章列表序号怎么写?
    在PbootCMS中,文章列表的序号可以通过特定的标签来实现。本文将详细介绍如何在文章列表中显示序号,并提供具体的示例代码。文章列表序号的标签PbootCMS提供了两种不同的序号标签:[list:n]:序号从0开始。[list:i]:序号从1开始。示例代码假设你需要在一个文章列表中显示序号,可以......
  • PbootCms模板当列表页只有一页的时候不显示分页的小技巧
    在PBootCMS中,如果希望在列表页只有一页时隐藏分页条,可以通过条件判断来实现。具体步骤如下:步骤1:判断总页数获取总页数:使用 {page:count} 获取总页数。判断总页数:当总页数大于1时显示分页条。详细解释判断总页数使用 {pboot:if('[page:count]'>1)} 判断总......
  • PbootCMS中判断文章列表是否有缩略图并避免默认图片的显示
    在PBootCMS中,为了在文章列表中展示缩略图,并避免在没有上传缩略图时显示默认图片,可以使用 isico 返回值来判断当前文章是否有缩略图。以下是一个详细的示例代码,展示了如何实现这一功能。示例代码<ulclass="note-ul">{pboot:listscode={sort:scode}}<li......
  • pbootcms模板文章列表没有缩略图时也不显示默认图片
    在使用PBootCMS模板建设网站时,如果列表使用了缩略图显示,可以通过判断缩略图是否存在来决定是否显示图片。以下是详细的代码示例,帮助你实现这一功能。示例代码假设你需要在列表中显示缩略图,并且只有当有缩略图时才显示,可以使用以下代码:<!DOCTYPEhtml><htmllang="zh-CN"><......
  • 美容美发营销版的功能列表
    很抱歉,由于我是文本型AI,无法直接提供导购图。但是,我可以为你提供一份美容美发营销版的功能列表,以便你更好地了解该产品的特点和优势。**美容美发营销版功能列表**1.**增加买单功能**:支持多种支付方式,方便顾客结账。2.**增加客服功能**:提供在线客服,及时解答顾客的问题和疑......
  • 初始化的代码块和@PostConstruct有什么区别
    背景    在实际开发中,我们经常会需要进行一些初始化操作,比如进行一些预加载和赋值之类的。在代码中,常见的有通过静态代码块、非静态代码块,@PostConstruct来实现初始化。那么既然他们都可以实现初始化操作,那么他们有什么区别呢?使用方式静态代码块:是用 static 关键......
  • Axure解决列表项中"触发内部元件交互"的冲突问题
    背景在绘制列表项中“更多”菜单按钮的时候,我想在我鼠标悬浮上去时会出现一个底色的效果如下图:但我在做的过程中发现如果在一个组下勾选了"触发内部元件鼠标交互样式",那你鼠标还没放到"更多"按钮上就已经给触发了制作过程1、所需元件2、结构3、只需要在"更多"这个......
  • 信息学奥赛复赛复习04-CSP-J2019-04-加工零件-位运算、整数映射0或1、结构体、初始化
    PDF文档回复:20240926<12019CSP-J题目4加工零件[题目描述]凯凯的工厂正在有条不紊地生产一种神奇的零件,神奇的零件的生产过程自然也很神奇。工厂里有n位工人,工人们从1∼n编号。某些工人之间存在双向的零件传送带。保证每两名工人之间最多只存在一条传送带如果......
  • 信息学奥赛复赛复习04-CSP-J2019-04-加工零件-位运算、整数映射0或1、结构体、初始化
    PDF文档公众号回复关键字:2024092612019CSP-J题目4加工零件[题目描述]凯凯的工厂正在有条不紊地生产一种神奇的零件,神奇的零件的生产过程自然也很神奇。工厂里有n位工人,工人们从1∼n编号。某些工人之间存在双向的零件传送带。保证每两名工人之间最多只存在一条传送带......
  • Java高效编程(1):使用静态工厂方法替代构造函数
    解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界在Java编程中,传统上,类允许客户端获取实例的方式是提供一个公共构造函数。然而,还有一种重要的技术,应该成为每个程序员工具箱中的一部分,那就是使用公共的静态工厂方法。静态工厂方法是一个静态方法,返回类的实例。这......