- 博客(85)
- 收藏
- 关注
原创 C++中的动态内存管理
C语言中动态内存开辟和c++中动态内存开辟的对比,当然c++兼容c的动态内存开辟。int _val;:_val(val){}//{// //...//}int main()// new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间还会调用构造函数和析构函数free(p1);delete p2;// 内置类型是几乎是一样的。
2024-04-01 06:30:35 1387
原创 运算符重载详解
作为类成员函数重载时,其形参看起来比操作数数目少1,因为成员函数的第一个参数为隐藏的this。,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。一个全局的赋值运算符重载,就和编译器在类中生成的默认赋值运算符重载冲突了,故赋值。意:内置类型成员变量是直接赋值的,而自定义类型成员变量需要调用对应类的赋值运算符。用于内置类型的运算符,其含义不能改变,例如:内置的整型+,不 能改变其含义。:T&,返回引用可以提高返回的效率,有返回值目的是为了支持连续赋值。:要复合连续赋值的含义。
2024-03-26 23:45:10 1411
原创 图形软件库emWin是什么?怎么学习emWin?
emWin 是 Segger 公司针对嵌入式平台开发的稳定、高效的图形软件库,适合用于任何图形 LCD 的操作应用。它可以输出高质量的无锯齿文字和图形,通过调用 emWin 提供的函数接口,开发嵌入式图形界面应用变得简单而快捷。emWin 主要有以下用途和应用场景:工业控制:用于人机界面、监控系统等。仪器仪表:为各类测量设备提供图形显示界面。智能家居:在智能家电的显示和控制方面发挥作用。医疗设备:如医疗监护仪等的界面设计。汽车电子:在车载信息系统中使用。消费电子。
2024-05-06 15:43:09 1015
原创 人工智能在哪些行业赋能
在医疗领域,人工智能可以帮助医生进行疾病诊断和治疗方案的制定。通过分析大量的医疗数据,它能够提供更准确的诊断建议,为患者带来更好的治疗效果。然而,人工智能的发展也带来了一些挑战。它可以帮助我们解决很多复杂的问题,提高工作效率,改善生活质量。但同时,我们也需要关注它的发展,确保它的使用是合理、安全和有益的。人工智能正在以惊人的速度发展,它已经悄然融入我们的生活,并在各个领域产生了深远的影响。在金融领域,人工智能可以用于风险评估和投资决策,为投资者提供更准确的信息。
2024-04-12 16:33:19 500
原创 探索 IT 行业的广阔前景
总之,IT 行业的前景依然光明。未来,我们可以期待看到更多的创新和突破,IT 行业将继续在推动社会进步方面发挥重要作用。首先,随着科技的不断进步,IT 行业成为了各个领域创新的驱动力。从智能手机到智能家居,从人工智能到大数据分析,IT 技术正在改变我们的生活方式和工作模式。另外,人工智能和机器学习领域的发展也是 IT 行业的一大亮点。不仅如此,随着物联网技术的不断普及,IT 行业将有更多的机会来构建连接设备和收集数据的智能系统。在当今数字化的时代,IT 行业正以惊人的速度发展,并展现出广阔的前景。
2024-04-12 16:31:19 494
原创 深入理解new和 delete:内存管理的关键
对于编写可靠的 C++ 程序至关重要。它们是内存管理的基石,掌握好它们可以让你的程序更加高效、稳定。它的作用是将分配给对象的内存归还给系统,以便其他部分的程序可以使用。操作符用于在运行时动态地分配内存。当你需要创建一个对象时,使用。,这对看似简单的操作,实际上却是内存管理的关键。今天我想和大家分享一下 C++ 中的。希望这篇博客对大家有所帮助,如果你有任何关于。就可以在堆上为这个对象分配所需的内存空间。的问题,欢迎在评论区留言交流!操作符则用于释放通过。
2024-04-10 23:11:01 244
原创 走进动态内存开辟的神奇世界
一开始,你可能只知道需要一个大概的空间,但具体的大小要根据实际情况来决定。动态内存开辟就像这个过程,它可以在程序运行时根据需要来分配内存空间。首先,它非常灵活,可以根据实际需求来分配内存,避免了浪费。其次,它可以让我们的程序更高效地利用资源。总之,动态内存开辟是一个非常有用的工具,但在使用时要小心谨慎。你们有没有想过,当我们在写程序的时候,需要的内存空间不一定是提前固定好的呢?其实就是当我们的程序需要更多内存时,它会自动地从系统中“借”一块合适大小的内存来使用。不过,动态内存开辟也不是完美的哦!
2024-04-10 23:07:08 263
原创 探索 C++ 中的 string 类
类提供了丰富的成员函数,例如查找、替换、插入、删除等操作,使字符串处理变得更加简单和高效。你无需担心内存分配和释放的问题,这大大减少了内存管理相关的错误。类是 C++ 中非常重要的一部分,它使字符串处理变得更加简单、高效和安全。希望这篇博客对你有所帮助,如果你有任何问题或想法,欢迎在评论中留言。类在 C++ 中扮演着重要的角色,它提供了许多方便的功能和优点。类的性能通常也很好,它在内部进行了优化,以提供高效的字符串操作。类时,要注意一些常见的问题。例如,字符串比较的方式、内存管理等。等操作符来操作字符串。
2024-04-08 20:34:16 187
原创 深入了解 STL:强大的编程工具
总的来说,STL 是一个强大而实用的工具,为编程提供了极大的便利。它是一个广泛使用的标准模板库,提供了一系列高效、灵活且可重复使用的组件。STL 中的容器包括向量、列表、队列、栈等,它们提供了不同的特性和适用场景,方便你根据具体需求选择最合适的容器。由于它是一种广泛认可的标准,其他开发者也很容易理解和维护你的代码。STL 的优势之一是它的效率。通过使用 STL 中的组件,你可以避免重复编写常见的功能代码,从而提高开发效率。迭代器是 STL 的核心概念之一,它使得能够统一地访问不同类型的容器中的元素。
2024-04-08 20:31:45 727
原创 三十六计与代码编写的奇妙结合
通过将三十六计的智慧应用到代码编写中,我们可以提高代码的质量、效率和可维护性。然而,要注意的是,这些策略需要根据具体情况进行合理运用,不能生搬硬套。在实际工作中,我们要不断总结经验,灵活运用这些智慧,创造出更加优秀的代码。在编程的世界里,我们总是在寻找更好的方法来解决问题,提高代码的质量和效率。而三十六计,这一中国古代智慧的结晶,竟然与代码编写有着惊人的契合。在这篇博客中,我将带您领略如何利用三十六计的智慧来编写更出色的代码。
2024-04-07 19:55:47 576
原创 迭代器(Iterator):遍历数据结构的利器
迭代器将数据结构的遍历过程抽象化,使得程序员可以专注于处理数据,而无需关心遍历的具体实现细节。在编程语言中,迭代器是一个非常重要的概念。通过了解迭代器的概念、作用和实现原理,我们可以更好地利用迭代器来优化我们的代码。隐藏数据结构实现细节:迭代器将遍历过程抽象化,使得程序员可以专注于处理数据,而无需关心数据结构的具体实现细节。遍历数据结构:迭代器可以帮助我们遍历数据结构中的每一个元素,例如列表、数组、集合等。支持不同的遍历方式:迭代器可以根据需要支持不同的遍历方式,如正向遍历、反向遍历等。
2024-04-06 18:50:00 412
原创 深入探讨string类的奥秘
在C++编程中,字符串处理是非常常见的一种操作。C++标准库为我们提供了一种名为String的类,用于处理字符串。String类在头文件中定义,它提供了许多成员函数和友元函数,使得我们在处理字符串时更加方便高效。
2024-04-06 18:42:58 1057
原创 C_C++数据的在内存中的分布
在编程世界中,C和C++语言一直以其强大的性能和灵活性著称。然而,这种强大和灵活的背后,离不开对内存分布的深入理解和熟练掌握。本文将详细介绍C/C++程序中的内存分布,包括栈、堆和全局变量的存储区域。创建共享共享内存,做进程间通信。是高效的I/O映射方式,用于装载一个共享的动态内存库。又叫堆栈–非静态局部变量/函数参数/返回值等等,栈是向下增长的。用于程序运行时动态内存分配,堆是可以上增长的。看下面的一段代码和相关问题来学习和巩固相关知识。–存储全局数据和静态数据。–可执行的代码/只读常量。
2024-04-04 04:24:54 338
原创 mallocfree和newdelete的区别
申请自定义类型对象时,malloc/free只会开辟空间,不会调用构造函数与析构函数,而new在申请空间后会调用构造函数完成对象的初始化,delete在释放空间前会调用析构函数完成空间中资源的清理。malloc申请空间失败时,返回的是NULL,因此使用时必须判空,new不需要,但是new需要捕获异常。malloc的返回值为void*, 在使用时必须强转,new不需要,因为new后跟的是空间的类型。malloc申请空间时,需要手动计算空间大小并传递,new只需在其后跟上空间的类型即可,
2024-04-03 02:33:13 429
原创 编译时提示存在多个默认构造函数的错误怎么解决呢?
上面的代码中存在两个构造函数,当你创建对象d1的时候,编译器调用构造函数,原本是应该调用第一个构造函数的,当时构造函数可以重载,第二个构造函数是全缺省的,即使你不写任何参数都有缺省参数,所以编译器无判断你用第一个构造函数还是第二个构造函数,所以你要解决就只能修改第二个构造函数,修改缺省值,使其不存在调用分歧。无参构造函数、全缺省构造函数、我们没写编译器默认生成的构造函数,都可以认为 是默认构造函数,并且默认构造函数只能有一个。c++程序中,如果编译器提升存在多个默认构造函数怎么解决呢?
2024-04-03 02:31:45 298
原创 你听过内部类吗?
A类里面的B类不计算是A类的大小 ,B类定义在A类里面和定义在全局没有区别,只是受A的类域限制。它不属于外部类,更不能通过外部类的对象去访问内部类的成员。内部类可以定义在外部类的public、protected、private都是可以的。注意内部类可以直接访问外部类中的static成员,不需要外部类的对象/类名。,参见友元类的定义,内部类可以通过外部类的对象参数来访。sizeof(外部类)=外部类,和内部类没有任何关系。问外部类中的所有成员。但是外部类不是内部类的友元。内部类是一个独立的类,
2024-04-02 07:41:50 217
原创 如何理解模板?
比如:当用double类型使用函数模板时,编译器通过对实参类型的推演,将T确定为double类型,然后产生一份专门处理double类型的代码,对于字符类型也是如此。类模板实例化与函数模板实例化不同,类模板实例化需要在类模板名字后跟,然后将实例化的类型放在中即可,类模板名字不是真正的类,而实例化的结果才是真正的类。,来 获得不同材料的铸件(即生成具体类型的代码),那将会节省许多头发。函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定 类型版本。
2024-04-02 07:27:22 1066
原创 内存泄漏是什么?如何避免内存泄漏?
什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏的危害:长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现内存泄漏会导致响应越来越慢,最终卡死。// 1.内存申请了忘记释放// 2.异常安全问题Func();// 这里Func函数抛异常导致 delete[] p3未执行,p3没被释放.
2024-04-01 06:38:09 1282
原创 explicit关键字详解
单参构造函数,没有使用explicit修饰,具有类型转换作用 explicit修饰构造函数,禁止类型转换—explicit去掉之后,代码可以通过编译。构造函数不仅可以构造与初始化对象,对于单个参数或者除第一个参数无默认值其余均有默认值的构造函数,还具有类型转换的作用。虽然有多个参数,但是创建对象时后两个参数可以不传递,没有使用explicit修饰,具有类型转换作用。上述代码可读性不是很好,
2024-03-31 23:52:26 227
原创 面向对象这么理解,早就懂了
现实生活中的实体计算机并不认识,计算机只认识二进制格式的数据。实生活中的实体,用户必须通过某种面向对象的语言,对实体进行描述,然后通过编写程序,创。楚,想要让计算机识别人想象中的洗衣机,就需要人通过某种面相对象的语言(比如:C++、机对象进行描述的,通过洗衣机类,可以实例化出一个个具体的洗衣机对象,此时计算机才。Java、Python等)将洗衣机用类来进行描述,并输入到计算机中。建对象后计算机才可以认识。么属性,有那些功能,即对洗衣机进行抽象认知的一个过程。在类和对象阶段,大家一定要体会到,
2024-03-31 23:51:00 248
原创 拷贝对象时的一些编译器优化
在传参和传返回值的过程中,一般编译器会做一些优化,减少对象的拷贝,这个在一些场景下还 是非常有用的。优化看编译器,一般g++都是这样了,都是常规优化了。
2024-03-30 00:13:53 168
原创 Typora字数过多的时候造成卡顿现象如何解决?
当typora字数达到上万的时候,使用输入法打字和点击切换时就会异常的卡顿,因为typora会实时渲染页面,将拼音输入到页面上再渲染,所以就会异常卡顿,以上三种方法可以帮忙解决。点击 、切换、滚动、打字都有点卡顿,下面介绍三种方法,三种方法都可以尝试,建议先尝试方法一,效果不满意就用方法二,实在不行就最后一个取巧的办法。禁用GPU之后,软件启动的时候比之前慢,但是打开之后不卡顿了,至少可以减少70%卡顿。typora --> 文件 --> 偏好设置 --> 通用 --> 打开高级设置。
2024-03-29 01:09:40 2067
原创 static修饰成员的作用
用static修饰成员函数,使这个类只存在这一份函数,所有对象共享该函数,不含this指针,因而只能访问类的static成员变量。例如可以封装某些算法,比如数学函数,如ln,sin,tan等等,这些函数本就没必要属于任何一个对象,所以从类上调用感觉更好,比如定义一个数学函数类Math,调用Math::sin(3.14);用static修饰类的数据成员使其成为类的全局变量,会被类的所有对象共享,包括派生类的对象,所有的对象都只维持同一个实例。static修饰函数使得函数只能在包含该函数定义的文件中被调用。
2024-03-28 02:11:10 653
原创 初始化列表
1、平时写构造函数,成员变量尽量在初始化列表初始化,就算你不写,它也一样走初始化列表。2、所有的成员都会走初始化列表,因为这个地方时成员定义的地方。如果你不写,它也会走,你写了就用你的,拷贝构造函数也是构造,所以也有初始化列表。建议:以后成员变量能在初始化列表初始化,就在初始化列表初始化,不要在函数里面初始化,函数里面初始化的话,其实就算是赋值了。虽然上述构造函数调用之后,对象中已经有了一个初始值,但是不能将其称为对对象中成员变量的初始化,一定会先使用初始化列表初始化。每个成员变量在初始化列表中。
2024-03-28 02:08:48 148
原创 从汇编以及栈帧层面理解内联函数的原理
(即函数不是很长,具体没有准确的说法,取决于编译器内部实现)、**不是递归、且频繁调用的函数采用inline修饰,否则编译器会忽略inline特性。所以 内联函数不要声明与定义分离,直接在.h文件中定义,调用时会直接展开在.cpp文件,声明和定义分离是为了好看,内联函数不需要分离。宏太复杂,所以弄出内联,内联适合小函数,把函数连到程序里面,这样就直接用,不需要调用,但是它占用空间。如果在上述函数前增加inline关键字将其改成内联函数,在编译期间编译器会用函数体替换函数的 调用。的函数叫做内联函数,
2024-03-26 23:43:11 572
原创 指针和引用有什么联系?有什么区别?
引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小。引用就是一个别名,没有独立空间,和其引用实体共用同一块空间。引用概念上定义一个变量的别名,指针存储一个变量地址。,而指针可以在任何时候指向任何一个同类型实体。在初始化时引用一个实体后,就。(32位平台下占4个字节)实际是有空间的,因为。
2024-03-25 16:49:14 147
原创 深层次理解拷贝构造函数
c语言中结构体传参都是传地址,一旦是传值传参,就是浅拷贝,有可能会出现bug,因为如果传了malloc开辟的地址,结构体传过来修改了,就可能改了原来的结构体。一旦涉及到资源申请 时,则拷贝构造函数是一定要写的,否则就是浅拷贝。为了提高程序效率,一般对象传参时,尽量使用引用类型,返回时根据实际场景,能用引用尽量使用引用。注意:在编译器生成的默认拷贝构造函数中,内置类型是按照字节方式直接拷贝的,而自定。,在用已存在的类类型对象创建新对象时由编译器自动调用。字节序完成拷贝,这种拷贝叫做浅拷贝,或者值拷贝。
2024-03-24 00:12:57 236
原创 int的大小你知道时4个字节,那么类的大小你知道怎么计算吗?
只算成员变量,不算成员函数,因为对象中变量不是一样,函数都是调用同一个函数,所以没有必要在对象的大小中并入成员函数,对象的大小只包含了成员变量的大小。类中既可以有成员变量,又可以有成员函数,那么一个类的对象中包含了什么?缺陷:每个对象中成员变量是不同的,但是调用同一份函数,如果按照此种方式存储,当一。如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整。 体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。为什么成员变量在对象中,成员函数不在对象中呢?
2024-03-24 00:05:52 337
原创 指针空值nullptr(C++11)
在C++98中,字面常量0既可以是一个整形数字,也可以是无类型的指针(void*)常量,但是编译器默认情况下将其看成是一个整形常量,如果要将其按照指针方式来使用,必须对其进行强转(void *)0。在良好的C/C++编程习惯中,声明一个变量时最好给该变量一个合适的初始值,否则可能会出现不可预料的错误,比如未初始化的指针。程序本意是想通过f(NULL)调用指针版本的f(int*)函数,但是由于NULL被定义成0,因此与程序的初衷相悖。**,或者被定义为无类型指针****(void*)**
2024-03-23 00:21:33 154
原创 c++会写hello wolrd但是不懂每一段代码的含义?一文带你深入理解
注意:早期标准库将所有功能在全局域中实现,声明在.h后缀的头文件中,使用时只需包含对应头文件即可,后来将其实现在std命名空间下,为了和C头文件区分,也为了正确使用命名空间,规定C++头文件不带.h;标准输出对象(控制台)和cin标准输入对象(键盘),必须包含< iostream >头文件以及按命名空间使用方法使用std, (2)std是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中。 cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出。
2024-03-23 00:18:34 309
原创 c++函数重载的底层理解以及概念
在大型程序项目中,一般都是分工合作的,此时设计出了大量的函数,如果过两个程序员设计出了相同的函数名,即使函数里面的内容不一样,在C语言中编译也会出现链接错误,甚至你的函数名与包含的库函数中的名字相同,也一样会出现错误,所以c语言不允许同名函数存在。1、参数类型不同,也就是int long char这些,只要类型不一样,构成函数重载,函数名即使相同,依然可以按调用程序员预想之中的函数,而不会弄混。文件中没有Add的函数地址,因为Add是在b.cpp中定义的,所以Add的地址在b.o中。
2024-03-22 15:45:11 489
原创 基于范围的for循环(C++11)
c++11的语法需要新的编译器,vs2018编译不了 ,linux也是要gcc g++ 4.6以上。基于范围的for需要新一点的编译器才能编译通过。而言,由程序员来说明循环的范围是多余的,有时候还会容易犯错误。注意:与普通循环类似,可以用continue来结束本次循环,也可以用break来跳出整个循环。begin和end的方法,begin和end就是for循环迭代的范围。围内用于迭代的变量,第二部分则表示被迭代的范围**。注意:以下代码就有问题,因为for的范围不确定。(1)范围for的语法。
2024-03-22 14:00:20 195
typora自动产生log文件怎么关闭?
2024-03-28
TA创建的收藏夹 TA关注的收藏夹
TA关注的人