c++基础
文章平均质量分 72
不是杠杠
严于律己,宽以待人。
学无止境
展开
-
strlen和sizeof
strlen 和 sizeof 是 C 语言中两个用于确定字符串或数据类型大小的常用操作符,但它们的工作方式和目的有所不同。下面是对这两个操作符的详细解释:原创 2024-03-26 09:04:36 · 1053 阅读 · 0 评论 -
整型变量的原子操作
原子操作(Atomic Operation)是指不可中断的操作,即在多线程环境下,当一个线程在执行原子操作时,不会被其他线程的调度和中断所影响。这种操作在多线程编程中尤为重要,因为它能保证操作的原子性,从而避免数据竞争和不一致。原创 2024-03-14 17:06:35 · 1215 阅读 · 0 评论 -
线程(thread)
线程(Thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix/Linux系统中,使用POSIX线程库(也称为pthread库)来支持多线程编程。原创 2024-03-13 15:04:06 · 598 阅读 · 0 评论 -
explicit关键字详解
在C++中,explicit关键字用于声明只能通过显式调用来调用的单参数构造函数(即只接受一个参数的构造函数)。这样的构造函数默认可以用于隐式类型转换,但使用了explicit关键字后,禁止了隐式转换,只能通过显式调用来使用。原创 2024-03-11 22:30:45 · 360 阅读 · 0 评论 -
新式的字符串字面常量(String Literal)
在 C++ 中,关于字符串字面常量的新式语法或特性主要与原始字符串字面量(Raw String Literals)和用户定义的字符字面量(User-Defined Literals for Characters)有关原创 2024-03-11 20:30:39 · 446 阅读 · 0 评论 -
c++ 新的函数声明语法
在C++11及以后的标准中,引入了一些新的函数声明语法,其中最显著的变化是引入了函数声明中的右值引用(&&)、默认参数和noexcept关键字。原创 2024-03-11 20:23:57 · 822 阅读 · 0 评论 -
类的关系 继承(Inheritance)、聚合(Aggregation)和关联(Association)
在面向对象编程中,类之间的关系主要有以下几种:继承(Inheritance)、聚合(Aggregation)和关联(Association)。每种关系在对象的创建和销毁时,构造函数和析构函数的调用顺序都会有所不同。下面我将分别解释这些关系,并举例说明构造函数和析构函数的调用顺序原创 2024-03-07 18:11:47 · 1077 阅读 · 0 评论 -
浅拷贝 深拷贝
在C++中,浅拷贝和深拷贝是对象复制时非常重要的概念,尤其在处理动态分配的内存和复杂数据结构(如指针、数组和自定义对象)时。下面详细解释这两种拷贝方式,并提供相应的示例。原创 2024-03-07 17:52:53 · 232 阅读 · 0 评论 -
临时对象
临时对象是在程序中隐式创建并用于保存某种状态的对象,它在创建后立即被使用,并在使用完毕后立即被析构。这种对象通常没有显式的名字,是为了简化代码编写和提高效率而由系统自动创建的。原创 2024-03-07 17:45:00 · 436 阅读 · 0 评论 -
运算符重载(Operator Overloading)
在C++中,运算符重载(Operator Overloading)是一种允许程序员为自定义数据类型重新定义或重载已有的运算符的功能。通过运算符重载,我们可以使得自定义类型的对象能够像内置类型(如int、float等)一样使用运算符原创 2024-03-07 17:31:30 · 930 阅读 · 0 评论 -
friend(c++ 关键字)
C++中,friend关键字用于声明友元函数或友元类,它们可以访问类的私有(private)和保护(protected)成员,即使它们不是类的成员。这提供了一种突破数据封装和隐藏的方式,使得某些函数或类能够访问另一个类的内部状态。原创 2024-03-07 17:11:39 · 551 阅读 · 0 评论 -
右值引用(rvalue reference)
C++11 引入了右值引用(rvalue reference)的概念,这是为了支持移动语义(move semantics)和完美转发(perfect forwarding)而引入的新特性。右值引用允许我们高效地处理临时对象,避免不必要的拷贝,从而提高程序的性能。原创 2024-03-06 17:55:27 · 1464 阅读 · 0 评论 -
带领域的枚举(Scoped Enumeration
带领域的枚举(Scoped Enumeration)在C++中确实是一个重要的特性,它允许你创建类型安全的枚举,其中每个枚举值都是其枚举类型的一部分,并且不会隐式地转换为整数或从整数转换回来。这样做可以防止一些常见的编程错误,比如错误地假设枚举值可以直接与整数互操作。原创 2024-03-04 22:20:59 · 1046 阅读 · 0 评论 -
命名空间(namespace)
在C++中,命名空间(Namespace)是一个特性,用于封装代码并避免名称冲突。命名空间可以看作是一个容器,其中可以包含类、函数、变量、常量、其他命名空间等。通过使用命名空间,我们可以更好地组织代码,提高代码的可读性和可维护性。原创 2024-03-04 22:04:49 · 464 阅读 · 0 评论 -
队列(queue)c++
C++ 中的队列(queue)是一种先进先出(FIFO)的数据结构。原创 2024-03-01 16:36:33 · 286 阅读 · 0 评论 -
对象模型(Object Model)
对象模型(Object Model)原创 2024-03-01 16:06:02 · 1039 阅读 · 0 评论 -
仿函数(Functor(c++))
仿函数(Functor)是一个可以像函数那样被调用的类对象。这意味着它实现了operator(),使得类的对象可以像函数那样被调用。原创 2024-03-01 15:37:07 · 879 阅读 · 0 评论 -
智能指针(Smart Pointers)
智能指针(Smart Pointers)是C++中的一种高级特性,它提供了一种自动管理动态分配内存的机制。通过智能指针,开发者可以避免手动管理内存所带来的问题,如内存泄漏和悬挂指针等。智能指针的主要目的是确保当对象不再需要时,其内存能够被自动释放。原创 2024-03-01 15:28:09 · 634 阅读 · 0 评论 -
stack(堆栈)
堆栈(Stack)是一种遵循后进先出(Last In First Out,简称LIFO)原则的数据结构。这意味着最后一个被添加到堆栈中的元素将是第一个被移除的元素。堆栈在计算机科学和编程中有许多应用,包括函数调用、内存管理、括号匹配等。原创 2024-02-29 15:30:34 · 296 阅读 · 0 评论 -
list(stl)
C++ STL 中的 std::list 是一个双向链表容器,提供了一系列操作双向链表的 API。原创 2024-02-29 15:26:56 · 1108 阅读 · 0 评论 -
deque
deque,即双端队列(double-ended queue),是一种具有队列和栈的性质的数据结构。它允许你在队列的两端进行元素的插入和删除操作。在C++的STL(Standard Template Library)中,deque是一个模板类,可以存储任何类型的数据。原创 2024-02-29 15:15:11 · 935 阅读 · 0 评论 -
vector
std::vector是 C++ 标准模板库 (STL) 中的一个动态数组类模板,它提供了一个可以动态调整大小的数组。std::vector是一种序列容器,它支持随机访问迭代器,因此可以高效地访问其内部的任何元素。原创 2024-02-29 14:42:02 · 1003 阅读 · 0 评论 -
stl 迭代器(Iterator)
迭代器(Iterator)原创 2024-02-29 14:24:49 · 462 阅读 · 0 评论 -
typedef关键字详解
typedef是 C 和 C++ 语言中的一个关键字,用于为现有的数据类型定义一个新的名称。它通常用于简化复杂的类型声明或为某种类型创建更具描述性的名称。typedef并不创建新的数据类型,而是为现有的数据类型创建一个别名。原创 2024-02-29 14:08:21 · 415 阅读 · 0 评论 -
typename
typename是 C++ 模板编程中的一个关键字,它用于解决模板编译时的依赖名称问题。在模板编程中,有时编译器无法确定一个名称是否代表一个类型还是一个值,这时候就需要使用typename来明确告诉编译器这个名称是一个类型。原创 2024-02-29 13:46:55 · 264 阅读 · 0 评论 -
装饰模式(Decorator Pattern)
装饰模式(Decorator Pattern)是一种结构型设计模式,它允许通过将对象包装在装饰器类的实例中来动态地添加新的行为和责任。这种模式可以在不修改现有代码的情况下,灵活地扩展对象的功能。原创 2024-02-22 11:12:14 · 864 阅读 · 0 评论 -
函数模板(Function Templates)
函数模板(Function Templates)是C++中的一种机制,允许您编写可以处理多种不同类型的函数,而无需为每种类型都编写一个单独的函数。函数模板在参数类型或数量上可以是泛化的,允许您编写一次代码,然后在多种类型上进行重复使用。原创 2024-02-21 17:20:02 · 289 阅读 · 0 评论 -
variable template(变量模版)
C++14引入了,它类似于函数模板,但是定义的是变量而不是函数。变量模板使得我们可以以模板的方式定义一系列不同类型的变量,从而提高代码的通用性和可重用性。原创 2024-02-21 17:11:08 · 416 阅读 · 0 评论 -
constexpr 关键字(常量表达式)
constexpr关键字用于在编译时求值,并要求在编译时就能确定其值。它通常用于声明常量表达式、函数、构造函数等,以便在编译时进行优化。原创 2024-02-21 16:48:53 · 752 阅读 · 0 评论 -
c++ pimpl
Pimpl(Pointer to Implementation)是一种设计模式,它将类的实现细节(私有成员变量和方法)隐藏在一个单独的实现类中,并在公共接口类中仅使用指向实现类的指针。原创 2024-02-20 11:13:01 · 347 阅读 · 0 评论 -
C++ RAII
RAII(Resource Acquisition Is Initialization)是C++编程中的一种重要的资源管理技术。它的核心思想是:资源的获取应该在对象的构造阶段进行,而资源的释放则应该在对象的析构阶段进行。通过利用C++对象的生命周期和析构函数,在对象生命周期结束时自动释放资源,从而避免资源泄漏和内存泄漏的发生。具体来说,RAII 的实现方式是将资源的管理封装到类中,利用类的构造函数来获取资源,利用析构函数来释放资源。这样,当对象被创建时,资源被获取;原创 2024-02-20 10:26:34 · 1081 阅读 · 0 评论 -
range-Based for循环
在这个示例中,declaration部分的int num声明了一个整型变量num,用于存储每次迭代中的当前元素的值。range-based for循环在遍历过程中不需要指定起始和结束迭代器,它会自动遍历collection中的所有元素,并将每个元素赋值给declaration中声明的变量,然后执行statement中的语句。3.statement:循环体内的语句,用于处理每个元素。1.declaration:用于声明循环中每个元素的变量,可以是引用也可以是值,类型由collection中元素的类型决定。原创 2024-02-19 16:34:03 · 282 阅读 · 0 评论 -
big three(c++)
"Big Three"是指在C++类中需要手动实现的三个特殊成员函数,分别是拷贝构造函数(Copy Constructor)、拷贝赋值运算符(Copy Assignment Operator)和析构函数(Destructor)。这三个函数通常需要在类的实现中进行显式定义,因为它们涉及到资源的管理和对象的复制行为。通常情况下,拷贝构造函数的参数是同类型的另一个对象的引用,并在其中将其成员变量复制到当前对象中。拷贝赋值运算符用于将一个已经存在的对象的值赋给另一个已经存在的对象。原创 2024-02-19 14:07:49 · 453 阅读 · 0 评论 -
虚函数,虚指针,虚表,虚析构函数和多态
而且,只要它是最后的构造函数调用,那么在这个对象的生命期内,VPTR将保持被初始化为指向这个VTABLE, 但如果接着还有一个更晚派生的构造函数被调用,这个构造函数又将设置VPTR指向它的 VTABLE,等.直到最后的构造函数结束。多态,就是存在虚函数的基类和存在一个或者多个基于该基类(并且实现了该基类的虚函数)的派生类,当一个基类指针指向不同的派生类时,通过基类指针调用虚函数,会有不同的实现,从而实现虚函数的多态性质。当使用基类指针或引用调用虚函数时,实际调用的是指向派生类的虚函数表的相应虚函数。原创 2024-01-31 10:05:25 · 1568 阅读 · 1 评论 -
override关键字详解
编译运行:在上述示例中,derived类试图重写基类base的虚函数getValue,但它没有使用override关键字,也没有显式地指明该函数是对基类虚函数的重写。这种情况下,编译器并不会发出警告或错误。问题是,derived类中的foo函数的参数列表或返回类型与基类中的虚函数是否匹配是开发人员自己的责任。如果开发人员犯了错误,如参数列表不匹配或返回类型不一致,就会导致函数并没有真正地重写基类函数,而是在派生类中重新定义了一个新的函数。这可能会导致预期之外的行为和错误,而且这种问题在编译时无法捕获。原创 2023-08-22 16:58:45 · 187 阅读 · 0 评论 -
函数传参问题(指针传参,值传参,引用传参):
c++ 函数传参问题(指针传参,值传参,引用传参)原创 2021-11-27 19:54:36 · 5429 阅读 · 0 评论 -
c++ 模板
模板是c++的一种特性,允许函数或者类(对象)通过泛型(generic types)的形式表现或者运行模板可以使得函数或类在对应不同的类型(types)的时候正常工作,而无需为每一种类型分别写一份代码。1:函数模板(function tempalte):使用泛型参数的函数(function with generic parameters)2:类模板(class template):使用泛型参数的类(class with generic parameters)模板的声明(declaration)其实并未给出一原创 2022-06-16 15:09:02 · 12668 阅读 · 0 评论 -
函数重载,重写与隐藏
定义:定义函数名相同,参数不同的若干函数。必要条件:1:函数名必须相同2:函数参数必须不相同,可以是参数类型或者参数个数不同3:函数返回值可以相同,也可以不相同。原创 2022-10-12 18:35:34 · 366 阅读 · 0 评论 -
#ifndef #define #endif (条件编译)作用
#ifndef #define #endif 作用防止重复引用(重复引用会导致编译效率低) 有可能 还会报错原创 2022-05-16 16:59:03 · 1442 阅读 · 0 评论