- 博客(112)
- 资源 (2)
- 收藏
- 关注
原创 error: member access into incomplete type ‘element_type 编译,类包含和类定义相互包含为成员变量,并且引用成员函数报不是完整类型报错,问题
error: member access into incomplete type 'element_type
2025-06-03 09:37:51
636
原创 驼峰命名法(Camel Case)与匈牙利命名法(Hungarian Notation)详解
驼峰命名法(Camel Case)是一种变量、函数、类等标识符的命名方式,单词之间。:Java、JavaScript、C#、Go 等广泛使用。:如 Java、C# 等已有严格类型系统,前缀显得多余。:现代 IDE 可自动提示类型,前缀可能造成代码臃肿。,每个单词的首字母大写(或首单词小写),形似驼峰。:单词间无分隔符,但首字母大写仍能清晰区分。,帮助开发者快速识别变量类型或作用。:通过前缀快速识别变量类型或作用。:常量通常用全大写+下划线(如。,在变量名前添加。
2025-04-27 16:57:07
958
原创 c++17 对于临时对象作为右值的优化
定义临时物化指纯右值(如字面量、函数返回的非引用对象)在需要实际存储时,隐式转换为将亡值(xvalue)的过程。触发场景绑定到右值引用:如,字面量42(纯右值)需物化为临时对象以绑定到r。访问成员或子对象:如需物化为临时对象才能调用c_str()。初始化非类类型对象:如f(10);,字面量10需物化为 xvalue 以匹配参数类型。临时物化是纯右值转换为可操作对象的桥梁,仅在需要时触发。右值转换规则通过将纯右值提升为 xvalue,使移动语义高效介入。
2025-04-27 16:34:18
847
原创 策略模式(Strategy Pattern)与状态模式(State Pattern)的异同
两者均通过将行为委托给其他对象来实现功能解耦,遵循“组合优于继承”的原则。均支持扩展新的策略或状态,无需修改现有代码。两者在结构上相似,但设计目标和适用场景不同。:将状态相关的行为委托给具体的状态类。,状态变化由上下文或状态自身触发。:将算法逻辑委托给具体的策略类。,由客户端主动控制策略的选择。:持有策略或状态对象的引用。:定义行为方法的统一接口。
2025-03-14 13:41:59
367
原创 C++ Lambda 表达式详解
Lambda 表达式是 C++11 引入的匿名函数对象,用于简化代码逻辑的封装,尤其在需要临时函数或回调的场景中非常实用。:基础功能在 C++11 中引入,泛型 Lambda(C++14)、模板 Lambda(C++20)逐步增强。通过合理使用 Lambda,可以显著提升代码的可读性和简洁性,但需注意捕获安全和生命周期管理。:按引用捕获局部变量时,确保 Lambda 生命周期不超过变量。默认情况下,按值捕获的变量在 Lambda 内不可修改。:指定外部变量的捕获方式(按值、按引用等)。
2025-03-13 14:45:55
1032
原创 dbus aip详解
g_dbus_register_interface 函数的作用是将一个接口注册到 D-Bus 总线上,使得其他进程或应用可以通过 D-Bus 与它进行通信。你需要为接口提供方法、信号和属性,并且可以传递额外的用户数据和清理函数。{ NULL, 0, NULL, NULL } // 结束标志{ NULL, NULL, NULL } // 结束标志{ NULL, 0, 0, NULL, NULL } // 结束标志methods,signals,user_data,
2024-11-25 15:43:42
1000
1
原创 dbus知识详解
D-Bus 是一种进程间通信(IPC)和远程过程调用(RPC)机制,专门设计用于在同一台机器上运行的进程之间进行高效且易于使用的通信。它旨在用一个统一的协议取代该领域内多个竞争的 IPC 框架,这个协议特别针对满足安全的系统内进程间通信需求而量身定制。是一个轻量级、低延迟、低开销、高可用性的进程间通信系统(IPC),它已被大多数Linux发行版所采用。D-Bus由freedesktop.org项目提供,使用GPL许可证发行。
2024-11-25 15:41:07
2133
原创 fprintf 和printf的区别 都有什么优缺点 什么场景适用
fprintf和printf在C语言中都是用于输出格式化数据的函数,但它们之间存在一些关键差异,包括输出目标、函数参数和应用场景。这些差异导致了它们各自的优势和适用场景。
2024-04-09 09:33:11
966
原创 vscode 配置文件settings.json和c_cpp_properties.json的作用
在 Visual Studio Code (VSCode) 中,settings.json 和 c_cpp_properties.json 都是配置文件,它们分别用于不同的目的。
2024-04-09 09:32:04
3121
原创 strlen和sizeof
strlen 和 sizeof 是 C 语言中两个用于确定字符串或数据类型大小的常用操作符,但它们的工作方式和目的有所不同。下面是对这两个操作符的详细解释:
2024-03-26 09:04:36
1129
原创 linux网络常用命令
ifconfig是 Linux 系统下用于配置和显示网络接口信息的命令。该命令是的缩写,能够用来查看、配置、启用或禁用网络接口。以下是对ifconfig。
2024-03-18 16:42:53
1267
原创 整型变量的原子操作
原子操作(Atomic Operation)是指不可中断的操作,即在多线程环境下,当一个线程在执行原子操作时,不会被其他线程的调度和中断所影响。这种操作在多线程编程中尤为重要,因为它能保证操作的原子性,从而避免数据竞争和不一致。
2024-03-14 17:06:35
1294
原创 线程(thread)
线程(Thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix/Linux系统中,使用POSIX线程库(也称为pthread库)来支持多线程编程。
2024-03-13 15:04:06
670
原创 explicit关键字详解
在C++中,explicit关键字用于声明只能通过显式调用来调用的单参数构造函数(即只接受一个参数的构造函数)。这样的构造函数默认可以用于隐式类型转换,但使用了explicit关键字后,禁止了隐式转换,只能通过显式调用来使用。
2024-03-11 22:30:45
479
原创 新式的字符串字面常量(String Literal)
在 C++ 中,关于字符串字面常量的新式语法或特性主要与原始字符串字面量(Raw String Literals)和用户定义的字符字面量(User-Defined Literals for Characters)有关
2024-03-11 20:30:39
566
原创 c++ 新的函数声明语法
在C++11及以后的标准中,引入了一些新的函数声明语法,其中最显著的变化是引入了函数声明中的右值引用(&&)、默认参数和noexcept关键字。
2024-03-11 20:23:57
909
原创 类的关系 继承(Inheritance)、聚合(Aggregation)和关联(Association)
在面向对象编程中,类之间的关系主要有以下几种:继承(Inheritance)、聚合(Aggregation)和关联(Association)。每种关系在对象的创建和销毁时,构造函数和析构函数的调用顺序都会有所不同。下面我将分别解释这些关系,并举例说明构造函数和析构函数的调用顺序
2024-03-07 18:11:47
1247
原创 浅拷贝 深拷贝
在C++中,浅拷贝和深拷贝是对象复制时非常重要的概念,尤其在处理动态分配的内存和复杂数据结构(如指针、数组和自定义对象)时。下面详细解释这两种拷贝方式,并提供相应的示例。
2024-03-07 17:52:53
259
原创 临时对象
临时对象是在程序中隐式创建并用于保存某种状态的对象,它在创建后立即被使用,并在使用完毕后立即被析构。这种对象通常没有显式的名字,是为了简化代码编写和提高效率而由系统自动创建的。
2024-03-07 17:45:00
492
原创 运算符重载(Operator Overloading)
在C++中,运算符重载(Operator Overloading)是一种允许程序员为自定义数据类型重新定义或重载已有的运算符的功能。通过运算符重载,我们可以使得自定义类型的对象能够像内置类型(如int、float等)一样使用运算符
2024-03-07 17:31:30
1029
原创 friend(c++ 关键字)
C++中,friend关键字用于声明友元函数或友元类,它们可以访问类的私有(private)和保护(protected)成员,即使它们不是类的成员。这提供了一种突破数据封装和隐藏的方式,使得某些函数或类能够访问另一个类的内部状态。
2024-03-07 17:11:39
625
原创 右值引用(rvalue reference)
C++11 引入了右值引用(rvalue reference)的概念,这是为了支持移动语义(move semantics)和完美转发(perfect forwarding)而引入的新特性。右值引用允许我们高效地处理临时对象,避免不必要的拷贝,从而提高程序的性能。
2024-03-06 17:55:27
1578
原创 带领域的枚举(Scoped Enumeration
带领域的枚举(Scoped Enumeration)在C++中确实是一个重要的特性,它允许你创建类型安全的枚举,其中每个枚举值都是其枚举类型的一部分,并且不会隐式地转换为整数或从整数转换回来。这样做可以防止一些常见的编程错误,比如错误地假设枚举值可以直接与整数互操作。
2024-03-04 22:20:59
1114
原创 命名空间(namespace)
在C++中,命名空间(Namespace)是一个特性,用于封装代码并避免名称冲突。命名空间可以看作是一个容器,其中可以包含类、函数、变量、常量、其他命名空间等。通过使用命名空间,我们可以更好地组织代码,提高代码的可读性和可维护性。
2024-03-04 22:04:49
615
原创 仿函数(Functor(c++))
仿函数(Functor)是一个可以像函数那样被调用的类对象。这意味着它实现了operator(),使得类的对象可以像函数那样被调用。
2024-03-01 15:37:07
1204
原创 智能指针(Smart Pointers)
智能指针(Smart Pointers)是C++中的一种高级特性,它提供了一种自动管理动态分配内存的机制。通过智能指针,开发者可以避免手动管理内存所带来的问题,如内存泄漏和悬挂指针等。智能指针的主要目的是确保当对象不再需要时,其内存能够被自动释放。
2024-03-01 15:28:09
1959
原创 deque
deque,即双端队列(double-ended queue),是一种具有队列和栈的性质的数据结构。它允许你在队列的两端进行元素的插入和删除操作。在C++的STL(Standard Template Library)中,deque是一个模板类,可以存储任何类型的数据。
2024-02-29 15:15:11
1003
原创 vector
std::vector是 C++ 标准模板库 (STL) 中的一个动态数组类模板,它提供了一个可以动态调整大小的数组。std::vector是一种序列容器,它支持随机访问迭代器,因此可以高效地访问其内部的任何元素。
2024-02-29 14:42:02
1082
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人