首页 > 编程语言 >C++类成员变量初始化顺序

C++类成员变量初始化顺序

时间:2024-09-23 14:34:26浏览次数:7  
标签:初始化 顺序 10 C++ d2 d1

C++类成员变量初始化顺序

类成员初始化顺序与其在类中声明顺序一致。

比如

class Demo {

public:
	Demo(int d)
		:_d1{d},_d2{_d1+10}
	{
	
	}
	void show() {
		std::cout << "d1 = " << _d1 << std::endl;
		std::cout << "d2 = " << _d2 << std::endl;
	}
private:
	int _d2;
	int _d1;
};

我们初始化一个类

Demo d(10);
d.show();

运行后,得到

d1 = 10
d2 = -858993450

它的结果并不是按照构造函数中的初始化顺序进行赋值的,如果按照"_d1{d}, _d2{_d1+10}"来看,结果应该是 "_d1 = 10; _d2 = 20"。

因为C++ 类初始化顺序与其成员变量声明顺序一致,所以是先初始化 _d2, 执行 "_d2{_d1+10}" 这条指令,由于__d1未被初始化,所以编译器会给它随机赋值,导致_d2是一个未知的结果。

标签:初始化,顺序,10,C++,d2,d1
From: https://www.cnblogs.com/runtimeerror/p/18427026

相关文章

  • 面试:多线程顺序打印
            在多线程中有多种方法让线程按特定顺序执行,可以用线程类的join()方法在一个线程中启动另一个线程,另外一个线程完成该线程继续执行。比如说:使用join方法,T3调用T2,T2调用T1,这样就能确保T1就会先完成而T3最后完成。        定义三个类,分别实现Runnable接......
  • C++ 条件变量condition_variable的例子
    C++标准库对条件变量有两套实现:std::condition_variable 和 std::condition_variable_any 。这两个实现都包含在 <condition_variable> 头文件的声明中。两者都需要与一个互斥量一起才能工作(互斥量是为了同步);前者仅限于与 std::mutex 一起工作,而后者可以和任何满足最......
  • C++ 顶层const底层const
    inti=0;int*constpl=&i;//不能改变p1的值,这是一个顶层constconstintci=42;//不能改变ci的值,这是一个顶层constconstint*p2=&ci;//允许改变p2的值,这是一个底层constconstint*constp3=p2;//靠右的const是顶层const,靠左的是底层constconstint......
  • 【华为OD机试真题E卷】545、预订酒店 | 机试真题+思路参考+代码解析(E卷复用)(C++、Java
    文章目录一、题目......
  • 【华为OD机试真题E卷】544、数字涂色 | 机试真题+思路参考+代码解析(E卷复用)(C++、Java
    文章目录一、题目......
  • c++多线程,锁
    1)机器最大线程数uint16_tmax_thread=thread::hardware_concurrency();2)vector中管理线程获取线程ida)thread::id_id=std::this_thread::get_id();b)threadth(getSum_vector,ref(arr),ref(_sum));cout<<th.get_id();容器中存储线程变量:使用emplace_back原位构造a......
  • 南沙C++信奥老师解一本通题 1260:【例9.4】拦截导弹(Noip1999)
    ​【题目描述】某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦......
  • Qt C++设计模式->组合模式
    组合模式(CompositePattern)是一种结构型设计模式,允许你将对象组合成树形结构以表示部分与整体的层次关系。组合模式使得客户端可以以统一的方式对待单个对象和组合对象,简化了对复杂树形结构的操作。组合模式的应用场景组合模式非常适合用于需要处理树形结构的场景,比如文件系......
  • 【C++驾轻就熟】string类以及string类的模拟实现
    目录一、为什么学习string类?二、标准库中的string类 2.1string类(了解)2.2string类的常用接口说明 1.string类对象的常见构造 2.string类对象的容量操作3.string类对象的访问及遍历操作 4.string类对象的修改操作5.string类非成员函数 三、 string类的......
  • 场景初始化
    获取初始化的元素//常规consttargetdom = document.getElementById('targetdom')//vue3consttargetdom = ref('targetdom')//reactconsttargetdom = ref('targetdom')初始化相机、场景、光源、renderconstcamera=newThree.PerspectiveCamera(......