C++
文章平均质量分 65
CClaris
这个作者很懒,什么都没留下…
展开
-
快速学习C++中的模板
在使用模板时,请注意某些模板可能不适用于所有数据类型。当使用模板编程时,确保为所有可能的类型提供了正确的实现。模板是C++的一个强大特性,它允许您编写通用的代码来处理不同的数据类型。您不仅可以使用类型作为模板参数,还可以使用非类型模板参数,例如整数。函数模板允许您创建一个函数,该函数可以处理多种数据类型的输入。时,编译器会为每种数据类型生成一个版本的函数。类模板允许您定义一个能够处理多种数据类型的类。函数的返回类型和其参数类型都是由模板参数。上述代码定义了一个固定大小的数组类,其中。原创 2023-12-16 23:05:15 · 506 阅读 · 0 评论 -
弄懂所有排序算法(C++)
插入排序是一种简单的排序算法,它的工作原理是通过构建有序序列,对未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。选择排序是一种简单直观的排序算法,其基本思想是从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余的未排序元素中寻找到最小(或最大)元素,然后放到已排序的序列的末尾。冒泡排序被这样命名是因为,随着排序过程的进行,最大的元素(如果是升序排序)或者最小的元素(如果是降序排序)就像水中的"气泡"一样,慢慢"浮"到数组的顶端或者尾部。原创 2023-11-17 23:12:02 · 35 阅读 · 0 评论 -
快速弄懂C++中的this指针
【代码】快速弄懂C++中的this指针。原创 2023-11-17 22:49:56 · 255 阅读 · 0 评论 -
快速弄懂C++中的智能指针
当智能指针超出作用域时(比如说在函数中使用智能指针指向了一个对象,当该函数结束时会自动销毁该对象),它会自动删除其所指向的对象,这样可以避免内存泄露。**在局部函数中创建了一个局部对象的话,在函数结束后局部对象会被自动释放,但是若创建的是一个new对象在不使用智能指针的情况下若在函数结束运行时没销毁就会造成内存泄漏。:虽然智能指针提供了自动的内存管理功能,但仍然需要注意不要在非智能指针和智能指针之间产生混淆,这可能导致未定义的行为或其他问题。原创 2023-11-17 22:48:22 · 675 阅读 · 0 评论 -
变量使用volatile和不使用volatile的区别
假设有一个外部硬件设备,通过某个内存映射寄存器与你的程序通信。该寄存器的地址是0x4000,用来标识设备是否准备好发送数据。原创 2023-11-16 20:52:42 · 349 阅读 · 0 评论 -
快速弄懂C++中的深拷贝和浅拷贝
浅拷贝就是单纯拷贝指向该对象的内存,所以在进行多次浅拷贝后只是相当于多了几个指向同一个对象的指针,而深拷贝相当于完全复制了一个对象副本。浅拷贝指的是复制对象的所有成员变量的值,不管这些值是指针、基本数据类型还是其他对象,但当涉及到指针时,浅拷贝只会复制指针的值(即地址),而不是它所指向的数据,这可能会导致多个对象共享相同的数据。在上面的例子中,深拷贝确保了当一个对象被拷贝或分配时,每个对象都有其自己独立的资源副本,这避免了多个对象共享相同的资源。的拷贝构造函数创建的时,进行的是浅拷贝,所以。原创 2023-11-16 20:44:15 · 436 阅读 · 0 评论 -
C++中的四种构造函数
当创建和使用对象时,需要了解这些构造函数的差异,以确保正确地初始化和管理对象。原创 2023-11-14 22:10:54 · 539 阅读 · 0 评论 -
C++与多态
多态是面向对象编程中的一种核心概念,它允许对象根据其具体类型执行相应的操作,而不是其声明的类型。我们可以使用一个经典的动物的例子来说明这一点。原创 2023-11-13 23:54:14 · 129 阅读 · 0 评论 -
C++中为什么不建议使用隐式转换
例如,有一个接受字符串的函数,而调用方传递了一个数字,该数字被隐式转换为其字符串表示形式,但这可能不是调用方原本的意图。例如,一个函数期望一个小的对象,但由于隐式转换,它可能获得一个大的对象,从而增加不必要的拷贝开销。虽然这在这个特定的例子中可能是我们想要的行为,但在更复杂的代码中,隐式转换可能会导致混淆和错误。:在某些情况下,隐式转换可能会导致安全隐患,例如,当从一个大的整数类型隐式转换到一个小的整数类型时,可能会导致整数溢出。:当函数重载与隐式转换相结合时,可能会选择一个不是程序员预期的函数版本。原创 2023-11-13 23:51:50 · 305 阅读 · 0 评论 -
C++中的智能指针
当智能指针超出作用域时(比如说在函数中使用智能指针指向了一个对象,当该函数结束时会自动销毁该对象),它会自动删除其所指向的对象,这样可以避免内存泄露。**在局部函数中创建了一个局部对象的话,在函数结束后局部对象会被自动释放,但是若创建的是一个new对象在不使用智能指针的情况下若在函数结束运行时没销毁就会造成内存泄漏。:虽然智能指针提供了自动的内存管理功能,但仍然需要注意不要在非智能指针和智能指针之间产生混淆,这可能导致未定义的行为或其他问题。原创 2023-10-31 22:19:43 · 122 阅读 · 0 评论 -
C++中的四种特定类型转换机制
未定义的行为”(Undefined Behavior, 简称UB)在C++中是一个专有名词,意味着当程序出现这样的行为时,标准不为其定义具体的行为或结果。提供的转换是编译器的简单字节解释,不涉及运行时的类型信息或检查。可以将指向一个类的数据成员的指针转换为指向另一个类的数据成员的指针,或者将指向一个类的成员函数的指针转换为指向另一个类的成员函数的指针。是一个常量,它可能进行了某种优化,这样即使我们尝试更改它的值,实际的值也可能没有改变。指针转换为其他类型的指针,或将一个类型的指针转换为完全不同的类型。原创 2023-10-31 22:18:45 · 52 阅读 · 0 评论 -
C++中的转换构造函数
转换构造函数(也被称为类型转换构造函数)是一种特殊的构造函数,它可以使用一个参数来初始化新对象。其主要目的是允许一种类型到类类型的隐式转换。因为它允许隐式转换,所以在多数情况下,为了避免意料之外的类型转换,使用。但是,如前所述,允许这种隐式转换可能会导致不易发现的错误。为了避免这种情况,你可以使用。这样可以帮助避免某些类型的编程错误。类定义了一个转换构造函数,它可以接受一个。类型的对象时,这个转换构造函数就会被调用。关键字来阻止这种隐式转换是一个好的实践。因此,当我们使用一个。关键字后,你不能再使用。原创 2023-10-31 22:17:43 · 74 阅读 · 0 评论 -
C++中重写、重载、覆盖的区别
区分这些概念并明确它们的语义对于C++编程尤为重要,因为它们对于类的设计、继承和多态性行为有深远的影响。原创 2023-10-31 22:14:37 · 279 阅读 · 0 评论 -
C++中的virtual与override
当两个或更多的类从同一个基类虚继承时,只有一个基类实例会存在于最终的派生类对象中,从而避免了重复和二义性。纯虚函数是一个在基类中没有定义实现的虚函数。在派生类中,虚函数可以被重写。这允许我们通过基类的指针或引用调用派生类的函数实现,实现动态绑定。如果基类的析构函数是虚的,那么通过基类指针删除派生类对象时,派生类的析构函数也会被正确地调用。:通过纯虚函数,基类可以定义接口,而不提供实现,从而强制派生类提供特定的实现。是C++11引入的一个关键字,用于明确表示派生类中的函数意图覆盖(重写)基类中的虚函数。原创 2023-10-31 22:13:42 · 1152 阅读 · 0 评论