- 博客(100)
- 资源 (2)
- 收藏
- 关注
原创 fprintf 和printf的区别 都有什么优缺点 什么场景适用
fprintf和printf在C语言中都是用于输出格式化数据的函数,但它们之间存在一些关键差异,包括输出目标、函数参数和应用场景。这些差异导致了它们各自的优势和适用场景。
2024-04-09 09:33:11 616
原创 vscode 配置文件settings.json和c_cpp_properties.json的作用
在 Visual Studio Code (VSCode) 中,settings.json 和 c_cpp_properties.json 都是配置文件,它们分别用于不同的目的。
2024-04-09 09:32:04 2049
原创 strlen和sizeof
strlen 和 sizeof 是 C 语言中两个用于确定字符串或数据类型大小的常用操作符,但它们的工作方式和目的有所不同。下面是对这两个操作符的详细解释:
2024-03-26 09:04:36 1048
原创 linux网络常用命令
ifconfig是 Linux 系统下用于配置和显示网络接口信息的命令。该命令是的缩写,能够用来查看、配置、启用或禁用网络接口。以下是对ifconfig。
2024-03-18 16:42:53 1149
原创 整型变量的原子操作
原子操作(Atomic Operation)是指不可中断的操作,即在多线程环境下,当一个线程在执行原子操作时,不会被其他线程的调度和中断所影响。这种操作在多线程编程中尤为重要,因为它能保证操作的原子性,从而避免数据竞争和不一致。
2024-03-14 17:06:35 1209
原创 线程(thread)
线程(Thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix/Linux系统中,使用POSIX线程库(也称为pthread库)来支持多线程编程。
2024-03-13 15:04:06 592
原创 explicit关键字详解
在C++中,explicit关键字用于声明只能通过显式调用来调用的单参数构造函数(即只接受一个参数的构造函数)。这样的构造函数默认可以用于隐式类型转换,但使用了explicit关键字后,禁止了隐式转换,只能通过显式调用来使用。
2024-03-11 22:30:45 353
原创 新式的字符串字面常量(String Literal)
在 C++ 中,关于字符串字面常量的新式语法或特性主要与原始字符串字面量(Raw String Literals)和用户定义的字符字面量(User-Defined Literals for Characters)有关
2024-03-11 20:30:39 431
原创 c++ 新的函数声明语法
在C++11及以后的标准中,引入了一些新的函数声明语法,其中最显著的变化是引入了函数声明中的右值引用(&&)、默认参数和noexcept关键字。
2024-03-11 20:23:57 815
原创 类的关系 继承(Inheritance)、聚合(Aggregation)和关联(Association)
在面向对象编程中,类之间的关系主要有以下几种:继承(Inheritance)、聚合(Aggregation)和关联(Association)。每种关系在对象的创建和销毁时,构造函数和析构函数的调用顺序都会有所不同。下面我将分别解释这些关系,并举例说明构造函数和析构函数的调用顺序
2024-03-07 18:11:47 1065
原创 浅拷贝 深拷贝
在C++中,浅拷贝和深拷贝是对象复制时非常重要的概念,尤其在处理动态分配的内存和复杂数据结构(如指针、数组和自定义对象)时。下面详细解释这两种拷贝方式,并提供相应的示例。
2024-03-07 17:52:53 228
原创 临时对象
临时对象是在程序中隐式创建并用于保存某种状态的对象,它在创建后立即被使用,并在使用完毕后立即被析构。这种对象通常没有显式的名字,是为了简化代码编写和提高效率而由系统自动创建的。
2024-03-07 17:45:00 430
原创 运算符重载(Operator Overloading)
在C++中,运算符重载(Operator Overloading)是一种允许程序员为自定义数据类型重新定义或重载已有的运算符的功能。通过运算符重载,我们可以使得自定义类型的对象能够像内置类型(如int、float等)一样使用运算符
2024-03-07 17:31:30 924
原创 friend(c++ 关键字)
C++中,friend关键字用于声明友元函数或友元类,它们可以访问类的私有(private)和保护(protected)成员,即使它们不是类的成员。这提供了一种突破数据封装和隐藏的方式,使得某些函数或类能够访问另一个类的内部状态。
2024-03-07 17:11:39 544
原创 右值引用(rvalue reference)
C++11 引入了右值引用(rvalue reference)的概念,这是为了支持移动语义(move semantics)和完美转发(perfect forwarding)而引入的新特性。右值引用允许我们高效地处理临时对象,避免不必要的拷贝,从而提高程序的性能。
2024-03-06 17:55:27 1459
原创 带领域的枚举(Scoped Enumeration
带领域的枚举(Scoped Enumeration)在C++中确实是一个重要的特性,它允许你创建类型安全的枚举,其中每个枚举值都是其枚举类型的一部分,并且不会隐式地转换为整数或从整数转换回来。这样做可以防止一些常见的编程错误,比如错误地假设枚举值可以直接与整数互操作。
2024-03-04 22:20:59 1040
原创 命名空间(namespace)
在C++中,命名空间(Namespace)是一个特性,用于封装代码并避免名称冲突。命名空间可以看作是一个容器,其中可以包含类、函数、变量、常量、其他命名空间等。通过使用命名空间,我们可以更好地组织代码,提高代码的可读性和可维护性。
2024-03-04 22:04:49 449
原创 仿函数(Functor(c++))
仿函数(Functor)是一个可以像函数那样被调用的类对象。这意味着它实现了operator(),使得类的对象可以像函数那样被调用。
2024-03-01 15:37:07 860
原创 智能指针(Smart Pointers)
智能指针(Smart Pointers)是C++中的一种高级特性,它提供了一种自动管理动态分配内存的机制。通过智能指针,开发者可以避免手动管理内存所带来的问题,如内存泄漏和悬挂指针等。智能指针的主要目的是确保当对象不再需要时,其内存能够被自动释放。
2024-03-01 15:28:09 542
原创 stack(堆栈)
堆栈(Stack)是一种遵循后进先出(Last In First Out,简称LIFO)原则的数据结构。这意味着最后一个被添加到堆栈中的元素将是第一个被移除的元素。堆栈在计算机科学和编程中有许多应用,包括函数调用、内存管理、括号匹配等。
2024-02-29 15:30:34 294
原创 deque
deque,即双端队列(double-ended queue),是一种具有队列和栈的性质的数据结构。它允许你在队列的两端进行元素的插入和删除操作。在C++的STL(Standard Template Library)中,deque是一个模板类,可以存储任何类型的数据。
2024-02-29 15:15:11 931
原创 vector
std::vector是 C++ 标准模板库 (STL) 中的一个动态数组类模板,它提供了一个可以动态调整大小的数组。std::vector是一种序列容器,它支持随机访问迭代器,因此可以高效地访问其内部的任何元素。
2024-02-29 14:42:02 999
原创 typedef关键字详解
typedef是 C 和 C++ 语言中的一个关键字,用于为现有的数据类型定义一个新的名称。它通常用于简化复杂的类型声明或为某种类型创建更具描述性的名称。typedef并不创建新的数据类型,而是为现有的数据类型创建一个别名。
2024-02-29 14:08:21 412
原创 typename
typename是 C++ 模板编程中的一个关键字,它用于解决模板编译时的依赖名称问题。在模板编程中,有时编译器无法确定一个名称是否代表一个类型还是一个值,这时候就需要使用typename来明确告诉编译器这个名称是一个类型。
2024-02-29 13:46:55 259
原创 解析器模式(Parser Pattern)
解析器模式(Parser Pattern)是一种行为设计模式,用于将输入的数据解析成特定的结构或对象。它通常涉及到一个或多个解析器类,这些类负责处理输入并构建所需的输出结构。解析器模式特别适用于复杂的语法或格式要求,比如编程语言、配置文件或数据协议。
2024-02-28 16:54:42 369
原创 访问器模式(Visitor Pattern)
义访问器模式(Visitor Pattern)是一种将数据结构与数据操作分离的设计模式,它可以将对数据的操作添加到数据结构中,而不必修改已有的数据结构。这允许我们定义新的操作,而不需要修改已有的类结构。
2024-02-28 10:46:17 613
原创 命令模式(Command Pattern)
命令模式(Command Pattern)是一种行为设计模式,它允许将请求封装成一个对象,从而让你使用不同的请求把客户端与接收者解耦。命令模式的主要目标是实现请求的发送者和接收者之间的解耦,使得发送者不需要知道接收者的具体实现,而接收者也不需要知道请求的具体来源。
2024-02-28 08:49:06 1333
原创 职责链模式(Chain of Responsibility Pattern)
职责链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许对象接收请求并将其沿着处理者链传递,直到有一个处理者处理它为止。职责链模式通过将请求的处理逻辑分布
2024-02-27 14:52:57 402
原创 迭代器模式(Iterator Pattern)
迭代器模式(Iterator Pattern)是一种行为型设计模式,它提供了一种方法来顺序访问聚合对象中的各个元素,而不需要暴露该对象的内部表示。迭代器模式使得客户端代码能够独立于聚合对象的具体实现进行遍历操作。
2024-02-27 14:43:01 503
原创 组合模式(Composite Pattern)
组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构,并且能像使用单独对象一样使用组合对象。组合模式让客户端代码对单个对象和复合对象的使用具有一致性。
2024-02-27 14:28:51 706
原创 备忘录模式(Memento Pattern)
备忘录模式(Memento Pattern)是一种行为设计模式,它允许在不破坏封装性的前提下捕获一个对象的内部状态,并在以后将对象恢复到该状态。备忘录模式通常用于实现撤销操作(Undo)或历史记录(History)等功能。
2024-02-27 14:16:26 600
原创 状态模式(State Pattern)
状态模式(State Pattern)是一种行为设计模式,它允许对象在其内部状态改变时改变其行为。这意味着,当对象的状态发生变化时,它的行为也会发生变化。状态模式特别适用于行为依赖于其状态的对象,而且当这些状态可以独立于对象的其他部分进行变化时。
2024-02-27 14:05:27 627
原创 中介者模式(Mediator Pattern)
中介者模式(Mediator Pattern)是一种行为设计模式,它用于将一组对象的交互行为封装在一个中介者对象中,从而减少对象之间的直接耦合。这种模式提供了一种集中式的控制方式,通过中介者对象来协调不同对象之间的交互。
2024-02-27 13:39:25 396
原创 适配器模式(Adapter Pattern)
适配器模式是一种结构型设计模式,它允许将一个类的接口转换成客户希望的另一个接口。这种模式通常用于解决接口不兼容的问题。适配器模式包括三个角色:目标接口(Target)、适配器(Adapter)和被适配者(Adaptee)
2024-02-26 23:29:21 758
原创 代理模式(Proxy Pattern)
代理模式(Proxy Pattern)是一种结构型设计模式,其目的是为其他对象提供一个代理或占位符,以控制对这个对象的访问。代理类通常在客户端和目标对象之间起到中介的作用,用于控制对目标对象的访问,并在必要时添加额外的功能。
2024-02-26 23:20:21 868
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人