首页 > 编程语言 >【C++学习笔记 16】构造函数初始化列表

【C++学习笔记 16】构造函数初始化列表

时间:2024-08-11 16:25:56浏览次数:19  
标签:std const Name 16 C++ Entity string 构造函数

当编写类并向其中添加成员时,通常需要某种方式对这些成员进行初始化。
常见的方法,如写一个构造函数赋初值

class Entity{
private:
	std::string m_Name;
public:
	Entity() {
		m_Name = "UnKnow";
	}
	Entity(const std::string& name) {
		m_Name = name;
	}
   	const std::string& GetName() const { return m_Name; }
};

另一种方式是使用构造函数初始化列表

class Entity{
private:
	std::string m_Name;
	int m_score;
public:
	Entity()
		:m_Name("UnKnow"), m_score(100)
	{
	}
	Entity(const std::string& name)
	        :m_Name(name);
        {
	}

	const std::string& GetName() const { return m_Name; }
};

需要注意的是,这样写需要保持初始化变量的顺序与成员变量的声明顺序一致.
另外,两种写法的一大区别是,直接构造函数赋值可能造成性能浪费。原因是在成员声明时的代码运行过程,也创建了变量,直接构造函数赋值相当于创建了两次变量,并用后者覆盖前者。而使用初始化列表可以避免这种行为。当然,并非所有情况都是如此,对于整形这种基本类型,他不会被初始化直到显式赋值。


教程来源:The Cherno C++ 教程

标签:std,const,Name,16,C++,Entity,string,构造函数
From: https://blog.csdn.net/m0_59669215/article/details/141107363

相关文章

  • 轻松找回:如何在PostgreSQL 16中重置忘记的数据库密码
    目录1.引言2.PostgreSQL16的新特性简介3.解决方法概述4.方法一:通过修改`pg_hba.conf`文件重置密码5.方法二:通过命令行进入单用户模式6.方法三:使用pgAdmin工具重置密码7.总结与最佳实践写在以后1.引言你有没有过这样的经历?当你满怀期待地打开电脑准备工作时,......
  • postgres V16
    二postgresV16.3源码安装1安装centos-7​ 配置:1GB内存1处理器/1核心数量20GB硬盘​ 如果已经安装过PostgreSQL的其他版本,需要删除原有的PostgreSQL,操作流程如下:#(1)查看原有PostgreSQL的状态systemctllist-units|greppostgresqlservicepostgresql-<version>stat......
  • C++快速理解之面向对象
    文章目录1、定义类2、创建对象3、使用.访问成员4、使用->访问成员5、this指针6、构造函数7、析构函数8、重载对象C++中的类(Class)可以看做C语言中结构体(Struct)的升级版类是一个通用的概念,C++、Python、C#、PHP等很多编程语言中都支持类,都可以通过类创建对象......
  • panic: 8e85653db463fe36 state.commit 942043166 is out of range [939698375, 93970
    根据您提供的日志信息,看起来您的etcd服务遇到了一个panic错误,具体是因为state.commit的索引值942043166超出了预期的范围[939698375,939700076]。这种情况可能是由于etcd集群中的数据不一致导致的。首先,您可以尝试查看etcd集群的状态,确认所有成员是否都在正......
  • Linux C++ 多线程编程
    LinuxC++多线程编程参考教程:c++:互斥锁/多线程的创建和unique_lock<mutex>的使用_mutex头文件vc++-CSDN博客1.编写unique_mutex1.1创建文件夹通过终端创建一个名为unique_mutex的文件夹以保存我们的VSCode项目,在/unique_mutex目录下打开vscode。rosnoetic@rosnoetic-Virt......
  • C++入门基础知识9
    C++中的分号&语句块在C++中,分号是语句结束符。也就是说,每个语句必须以分号结束。它表明一个逻辑实体的结束。例如,下面是三个不同的语句: 语句块是一组使用大括号括起来的按逻辑连接的语句。例如: C++不以行末作为结束符的标识,因此,您可以在一行上放置多个语句......
  • python图片压缩大小及设置图片像素大小120乘160
    python图片压缩大小及设置图片像素大小120乘1601.在pycharm中安装pillow库的步骤:打开设置并转到“项目”页面。选择“python解释器”并单击“+”按钮。搜索“pillow”,选中包并单击“安装包”。1.打开PyCharm设置Windows:File>Settings2.转到“项目”页面在左侧导航栏中,单......
  • C++ call_once详解
    引言在多线程编程中,常常需要确保某些初始化操作只执行一次,例如初始化一个全局资源或单例模式中的实例创建。C++11引入了std::call_once和std::once_flag,为这种需求提供了便捷和高效的解决方案。一、基本概念1.std::call_oncestd::call_once是一个函数模板,它确保某个函数在......
  • C++11新特性
    C++11新特性语言特性移动语义右值引用转发引用可变模板列表初始化静态断言类型推导lambda表达式decltype类型声明nullptr空指针强类型枚举属性constexpr常量表达式委托构造用户定义语义显式虚重载Final限定符:限定的东西无法......
  • C++20新特性
    C++20新特性语言特性协程concept概念指定初始化器lambda表达式模板语义范围for循环增加初始化器[[likely]][unlikely]属性废弃隐式捕获this非类型模板参数的类类型constexpr虚函数explict(bool)立即函数usingenums,能直接进行using了lambda捕获参数包char8_t类型......