- 博客(91)
- 收藏
- 关注
原创 FX-C++11-decltype自动推导类型
关于返回值,从上面的代码可以推断出和表达式 t+u的结果类型是一样的,因此可以通过通过decltype进行推导,关于模板函数的参数t和u可以通过实参自动推导出来,因此在程序中就也可以不写。函数 func_cint() 返回的是一个纯右值(在表达式执行结束后不再存在的数据,也就是临时性的数据),对于纯右值而言,只有类类型可以携带const、volatile限定符,除此之外需要忽略掉这两个限定符,因此推导出的变量d的类型为 int 而不是 const int。关于decltype的应用多出现在泛型编程中。
2025-03-24 13:40:27
606
原创 FX-C++11-auto自动推导类型
auto是 C++11 引入的一个强大特性,它简化了代码并提高了可读性,特别是在处理复杂类型和模板编程时。然而,使用时需要注意类型推断的规则,以避免潜在的错误。
2025-03-24 11:24:43
281
原创 FX-C++ const
const是 C++ 中用于定义常量的关键字,可以修饰变量、指针、引用、函数参数、成员函数等。合理使用const可以提高代码的安全性和可读性。const和constexpr的区别在于const的值可以在运行时确定,而constexpr的值必须在编译时确定。
2025-03-22 09:34:16
302
原创 FX-Lambda表达式
C++ Lambda表达式是一种强大的工具,可以简化代码并提高可读性。它支持灵活的捕获方式和参数列表,适用于各种场景,尤其是在STL算法和回调函数中。掌握Lambda表达式是现代C++编程的重要技能。
2025-03-16 18:33:50
279
原创 FX-C++智能指针
独占所有权,适用于单一所有者场景。:共享所有权,适用于多所有者场景。:弱引用,用于解决循环引用问题。和:推荐使用,更安全高效。智能指针是 C++ 中管理动态内存的强大工具,能够有效避免内存泄漏和悬空指针问题。
2025-03-16 18:22:28
351
原创 FX-异常处理
你可以通过继承或其派生类来创建自定义异常类。C++ 的异常处理机制提供了一种结构化的方式来处理运行时错误。通过合理使用trycatch和throw,可以使程序更加健壮和易于维护。
2025-03-16 18:17:10
364
原创 FX-std::deque
std::deque是一个非常有用的容器,特别适合需要在两端频繁插入和删除元素的场景。它的接口与类似,但在两端操作时性能更好。如果你需要在中间频繁插入或删除元素,可能需要考虑其他容器,如std::list。
2025-03-16 17:42:06
245
原创 FX-std::queue
std::queue// 定义一个存储 int 类型元素的队列// 使用 std::list 作为底层容器std::queue是一个简单易用的 FIFO 数据结构,适用于需要按顺序处理元素的场景。通过push()pop()front()等操作,可以方便地管理队列中的元素。
2025-03-16 17:33:31
301
原创 FX-std::stack
std::stackT是栈中元素的类型。Container是底层容器的类型,默认为。// 定义一个存储 int 类型的栈,底层容器为 std::deque<int>你也可以指定其他底层容器,例如std::stack是一个简单且高效的栈实现,适用于需要后进先出操作的场景。通过使用std::stack,你可以轻松地管理栈中的元素,而无需手动实现栈的逻辑。
2025-03-16 17:29:40
383
原创 FX-std::multiset
默认使用运算符进行排序。// 降序排序是一个非常有用的容器,特别适合需要存储重复元素并且需要自动排序的场景。通过掌握其基本用法,你可以在 C++ 中高效地处理这类需求。
2025-03-16 17:14:44
302
原创 FX-std::multimap
是一个强大的容器,适用于需要存储多个相同键的场景。它的主要特点是:允许重复键。元素按键排序。支持高效的查找、插入和删除操作(时间复杂度为 O(log n))。如果需要唯一键,可以使用std::map;如果需要更高效的插入和删除操作(不关心顺序),可以考虑。
2025-03-13 21:06:48
365
原创 FX-std::map
std::map例如,定义一个键为int,值为的std::mapstd::map是一个非常有用的容器,适用于需要根据键快速查找、插入和删除的场景。它的元素是按键自动排序的,因此在需要有序存储时非常方便。
2025-03-13 20:57:53
212
原创 FX-std::vector排序
如果需要根据特定规则排序,可以传递一个自定义的比较函数或 lambda 表达式。如果存储的是自定义对象,可以通过重载运算符或提供自定义比较函数来排序。std::sort是 C++ 中最常用的排序函数,适用于和其他容器。默认是升序排序,可以通过或自定义比较函数实现降序或其他规则排序。对于自定义对象,可以通过重载运算符或提供比较函数来排序。
2025-03-13 20:33:32
250
原创 FX-std::list
/ 定义一个空的 list// 使用初始化列表初始化std::list是一个灵活的双向链表容器,适合频繁插入和删除操作的场景。由于它不支持随机访问,因此在需要随机访问时,或std::deque可能是更好的选择。
2025-03-13 19:58:34
544
原创 FX-std::vector
是一个非常强大且灵活的容器,适用于大多数需要动态数组的场景。它提供了丰富的成员函数来管理元素,并且能够自动处理内存分配和释放。
2025-03-12 22:32:06
161
原创 FX-C++可变参数
方法优点缺点适用场景C 风格可变参数简单,兼容 C 语言类型不安全,不支持类对象简单的 POD 类型参数类型安全,语法简洁只能用于相同类型的参数固定类型的一组参数可变参数模板支持任意类型和数量的参数,类型安全语法复杂,可能增加编译时间泛型编程,复杂场景折叠表达式(C++17)语法简洁,避免递归需要 C++17 或更高版本简化可变参数模板的操作std::array类型安全,支持动态大小只能用于相同类型的参数动态或固定大小的一组参数根据具体需求选择合适的方式!
2025-03-12 22:05:44
345
原创 FX-模板
C++ 模板是强大的工具,能够极大地提高代码的复用性和灵活性。通过掌握函数模板、类模板、模板特化、可变参数模板等概念,你可以编写出更加通用和高效的代码。C++20 的 Concepts 进一步增强了模板的表达能力,使得模板编程更加直观和安全。
2025-03-12 21:41:51
199
原创 FX-函数重载、重写(覆盖)、隐藏
重载(Overloading):同一作用域内,函数名相同,参数列表不同。重写(Overriding):派生类重写基类的虚函数,函数签名必须相同。覆盖(Hiding):派生类定义了与基类同名的函数,隐藏了基类的同名函数。理解这些概念的区别有助于更好地设计和使用C++中的类和继承关系。
2025-03-11 19:56:24
405
原创 FX-运算符重载
运算符重载是C++中强大的特性,可以为用户定义的类型赋予直观的操作行为。通过合理使用运算符重载,可以使代码更简洁、更易读。但需要注意保持语义一致性,避免滥用。
2025-03-11 19:45:49
315
原创 FX-继承访问权限问题
继承方式基类public成员基类protected成员基类private成员公有继承publicprotected不可访问保护继承protectedprotected不可访问私有继承privateprivate不可访问公有继承是最常用的继承方式,表示派生类“是一个”基类(is-a 关系)。保护继承和私有继承较少使用,通常用于实现细节的封装。无论哪种继承方式,基类的private成员在派生类中都不可访问。
2025-03-10 23:13:32
327
原创 FX-继承
继承是C++中实现代码重用和多态的重要机制。通过继承,派生类可以复用基类的代码,并且可以通过重写虚函数来实现多态。理解继承的访问控制、构造函数和析构函数的调用顺序、多重继承和虚继承等概念,对于编写高质量的C++代码至关重要。菱形继承问题(Diamond Problem)是C++多重继承中的一个经典问题。它发生在派生类通过多个路径继承同一个基类时,导致基类的成员在派生类中存在多个副本,从而引发二义性和资源浪费的问题。菱形继承问题是由于多重继承导致基类成员在派生类中存在多个副本,从而引发二义性和资源浪费。
2025-03-10 23:08:42
610
原创 boost::interprocess::message_queue复杂用法
是一个强大的工具,用于在进程间传递消息。(如结构体、类对象)。。。。。以下是一些复杂用法的示例和说明。不仅可以发送基本数据类型(如intdouble),还可以发送复杂的数据结构(如结构体或类对象)。
2025-03-10 21:02:03
459
原创 boost::interprocess::message_queue基础用法
一种先进先出(FIFO)的数据结构,用于在进程间传递消息。使用共享内存作为底层存储,因此消息队列可以在不同进程之间共享。是线程安全的,多个进程可以同时发送和接收消息。使用创建消息队列。使用打开已存在的消息队列。使用send方法将消息放入队列。使用receive方法从队列中取出消息。使用删除消息队列。消息队列的名称,必须是唯一的。队列中最多可以存储的消息数量。每条消息的最大大小(以字节为单位)。发送消息时可以指定优先级,优先级高的消息会先被接收。
2025-03-10 20:38:33
310
原创 FX-extern C
当C++代码需要调用C语言编写的函数时,使用extern "C"告诉编译器按照C语言的方式处理函数名。当C语言代码需要调用C++编写的函数时,使用extern "C"确保函数名不被修饰。许多系统库或第三方库是用C语言编写的,使用extern "C"可以确保C++代码能够正确链接这些库。extern "C"extern "C"可以用于单个函数、多个函数或整个头文件。
2025-03-10 19:39:27
411
原创 FX-C++结构体与类的区别
通常用于表示简单的数据结构,尤其是当数据成员需要直接访问时。如果需要封装和数据隐藏,或者实现复杂的面向对象设计,优先使用。的选择更多是基于设计意图和代码风格,而不是严格的规则。常用于与C语言兼容的场景,或者不需要复杂封装的情况。如果需要直接访问数据成员,或者与C语言兼容,优先使用。通常用于表示更复杂的对象,强调封装和数据隐藏。适合用于复杂的对象模型,例如学生(适合用于简单的数据聚合,例如点(适合需要封装和数据隐藏的场景。适合与C语言代码交互时使用。默认的成员访问权限是。默认的成员访问权限是。
2025-03-09 22:29:29
403
原创 FX-C++结构体
C++中的结构体是一种灵活的数据类型,可以包含数据成员和成员函数,支持访问控制、构造函数、嵌套等特性。它与类的区别主要在于默认的访问控制。结构体通常用于简单的数据聚合或与C语言兼容的场景。
2025-03-09 17:45:50
242
原创 FX-C++结构体与C结构体区别
C++:在C++中,定义结构体时不需要使用typedef来创建类型别名。可以直接使用结构体名作为类型。C:在C语言中,通常需要使用typedef来为结构体创建类型别名,以便更方便地使用。**C++**的结构体功能更强大,支持成员函数、继承、访问控制等特性,使其更像是一个轻量级的类。C的结构体相对简单,主要用于组织数据,不支持成员函数、继承等面向对象的特性。
2025-03-09 17:18:46
313
原创 FX-类与对象
类是一种用户定义的数据类型,它可以包含数据成员(属性)和成员函数(方法)。public:// 数据成员(属性)// 成员函数(方法)C++类是实现面向对象编程的核心。通过类,你可以封装数据和行为,创建复杂的程序结构。掌握类的定义、访问控制、构造函数、析构函数、继承、多态等概念,是成为一名优秀C++程序员的关键。
2025-03-09 17:01:59
237
原创 FX-引用
引用是C++中一个强大且灵活的特性,合理使用引用可以提高代码的效率和可读性。理解引用的基本概念、特性和应用场景,对于编写高质量的C++代码非常重要。
2025-03-09 11:51:53
464
原创 FX-文件操作
C语言中的文件操作主要通过标准库函数来实现,常用的函数包括fopen()fclose()fread()fwrite()fseek()等。掌握这些函数的使用方法可以帮助你进行文件的读写操作。
2025-03-08 09:46:21
358
原创 FX-条件编译
针对不同的操作系统(如 Windows、Linux、macOS)编写不同的代码。条件编译通常通过预处理器指令实现。:在调试版本中加入调试信息,而在发布版本中去除这些信息。:根据用户需求启用或禁用某些功能。在 C/C++ 中,条件编译通过。:处理不同编译器之间的差异。
2025-03-07 14:29:42
115
原创 FX-动态内存管理
分配指定数量和大小的内存块,并将内存初始化为0。返回指向该内存块的指针。调整之前分配的内存块的大小。返回指向新内存块的指针。: 如果分配的内存没有被释放,会导致内存泄漏。确保在不再需要内存时调用。分配指定大小的内存块,返回指向该内存块的指针。分配的内存是适当对齐的,可以用于任何数据类型。释放之前分配的内存块。释放后的指针应设置为。: 不要对已经释放的内存再次调用。: 释放内存后,指针应设置为。,以处理内存分配失败的情况。,且原内存块保持不变。,这会导致未定义行为。这个示例展示了如何使用。
2025-03-06 21:54:03
156
原创 FX-共用体
共用体的定义使用union关键字,语法与结构体(structunion 共用体名 {数据类型 成员1;数据类型 成员2;...数据类型 成员n;共用体是检测大小端的一种简单而有效的方法,利用了共用体成员共享内存的特性。通过检查整数字节在字符数组中的位置,可以快速判断系统的大小端模式。
2025-03-06 21:17:46
897
原创 FX-枚举
枚举类型使用 enum 关键字定义,语法如下:enum 枚举名 {枚举值1,枚举值2,枚举值3,...例如:Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday在这个例子中,Weekday是一个枚举类型,它包含了一周中的七天。默认情况下,枚举值从0开始,依次递增。因此,Monday的值为0Tuesday为1,依此类推。
2025-03-06 19:46:13
158
原创 FX-结构体
结构体的定义使用structstruct 结构体名 {数据类型 成员1;数据类型 成员2;// 更多成员...示例int id;// 学号// 姓名// 成绩int id;// 声明两个结构体变量int id;// 直接声明变量。
2025-03-06 19:34:56
157
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人