首页 > 编程语言 >C++成员初始化列表比在构造函数内部赋值效率更高

C++成员初始化列表比在构造函数内部赋值效率更高

时间:2023-01-25 23:55:32浏览次数:53  
标签:初始化 执行 对象 C++ 列表 构造函数 赋值

A是个类,B中包含A类的对象
在执行构造函数的时候,如果内部有类对象,使用列表初始化效率会更高
B中的a和b都是A的对象
a是用的列表初始化
b是在构造函数内部初始化
a只会执行一次构造函数,而b则是先执行默认构造函数,再执行一次赋值运算符函数

可以这么理解,只要包含类对象,就会在进入构造函数函数体之前,执行一次构造函数
如果初始化列表写了,那么就按初始化列表执行构造函数,没写的其他对象成员则默认函数体内没有对该对象成员进行操作
会调用默认构造函数,保个底
再一一进行构造函数函数体内的赋值操作

class A
{
public:
    A()
    {
        cout << "默认构造函数" << endl;
    }
    A(int a)
    {
        value = a;
        cout << "A(int "<<value<<")" << endl;
    }
    A(const A& a)
    {
        value = a.value;
        cout << "拷贝构造函数"<< endl;
    }
    int value;
};

class B
{
public:
    B() : a(1)
    {
        b = A(2);
    }
    A a;
    A b;
};
int main()
{
    B b;
}

标签:初始化,执行,对象,C++,列表,构造函数,赋值
From: https://www.cnblogs.com/lxzbky/p/17067474.html

相关文章

  • C++零拷贝
    零拷贝就是一种避免CPU将数据从一块存储拷贝到另外一块存储的技术vector的函数emplace_back()它跟push_back()函数一样可以将一个元素插入容器尾部区别在于使用push_b......
  • C++面向对象
    封装继承多态允许将子类类型的指针赋值给父类类型的指针多态的实现方式覆盖override,重载overload覆盖是子类重新定义父类的虚函数重载是指允许存在多个同名函数,而这......
  • 【UE4 C++】调用外部链接库:lib静态库
    本例以插件形式测试使用Lib引用,打包程序运行不用再拷贝lib文件需要lib文件和.h头文件lib部分的代码.h头文件 #pragmaonce #ifndef__MYT......
  • 详细实例说明+典型案例实现 对枚举法进行全面分析 | C++
    第五章枚举法:::hljs-center目录第五章枚举法●前言1.简要介绍2.代码及结果示例(简单理解)3.生活实例●二、枚举法的典型案例——鸡兔同笼&质数求解1.鸡......
  • C++Day09 深拷贝、写时复制(cow)、短字符串优化
    一、std::string的底层实现1、深拷贝1classString{2public:3String(constString&rhs):m_pstr(newchar[strlen(rhs)+1]()){4}5private:6cha......
  • 【转】c++中Vector等STL容器的自定义排序
    三种方式实现vector的自定义排序方法1:重载运算符#include<vector>#include<algorithm>#include<functional>usingnamespacestd;structTItem{intm_i......
  • c++学习日记day1 1/25
    B.超重青蛙题目描述在青蛙王国,每个青蛙有着不同的体重。给出一组青蛙的体重,计算里面超出平均体重的青蛙数量。 输入第一行输入参数T,表示有T个测试实例第二行输入......
  • C++指针类型的局部变量初始化
    编译器一般不会对一般变量进行初始化,当然也包括指针。所以负责初始化指针变量的只有程序员自己。使用未初始化的指针是相当危险的。因为指针直接指向内存空间,所以程序员很......
  • C++ 单例模式最佳实践
    单例模式有很多种实现:懒汉/饿汉非线程安全线程安全每次判空加锁(效率不高)DCL:Double-checklock(繁琐,C++11之前的最佳实现)Meyers’singleton:静态变量(简洁,C++11之后......
  • C++ 实现复制赋值运算符重载
    考察点返回值类型MyClass&,可以连续赋值参数类型:(constMyClass&rhs)或者(MyClassrhs)值传递(copy-swap)自赋值安全无内存泄漏,旧值需要析构异常安全参考实现c......