c++
文章平均质量分 79
十字星的约定_
qwq
展开
-
C++ 变量类型与转换
可以用于基本类型转换、枚举与整数类型间的转换、指针和引用之间的转换(只要它们之间存在继承关系或转换是合法的)、以及类类型之间的显式转换(即使没有继承关系,只要有合适的构造函数或类型转换操作符)。是C++中的一种类型转换运算符,用于执行非多态类型的转换,包括基本数据类型之间的转换、继承体系内的向上转型(把派生类转换为基类)、以及任何没有二义性的转换。会在运行时检查转换的有效性,如果转换不合法(即对象不是目标类型或目标类型的公有派生类),则返回空指针(对于指针类型)或抛出。:由于需要在运行时查询对象类型,原创 2024-05-24 22:42:28 · 849 阅读 · 0 评论 -
C++时间操作
这个函数会阻塞当前线程直到指定的时间过去,但它仍然可能会受到操作系统调度的影响,实际休眠时间可能会略大于或小于指定时间。提供了更高精度的延时控制,并且不会受到信号的影响而提前结束,还提供了更加面向对象和类型安全的延迟控制方式,并且可以与。是一个POSIX标准的系统调用,用于使当前进程或线程暂停执行指定的纳秒(十亿分之一秒)时间。返回的值是剩余未睡眠的秒数,如果睡眠期间收到了信号并被处理,则可能提前结束睡眠。头文件中定义的一个函数,它允许线程在指定的持续时间内休眠。提供了更高的时间精度。原创 2024-05-24 22:37:44 · 299 阅读 · 0 评论 -
C++模板元编程编译期推断
模板类,用于获取函数类型(包括普通函数、成员函数等)的相关信息,如返回类型、参数数量和参数类型。可在编译时进行元编程和类型检查。通过特化版本可实现对不同类型的函数类型的处理。原创 2024-05-10 10:15:11 · 873 阅读 · 0 评论 -
C++线程同步
是 C++ 标准库头文件中定义的一个类,用于线程同步。它提供了一种让线程等待直到特定条件被满足的方法,是实现生产者-消费者模型、线程间同步等复杂同步问题的有效工具。需要与一个互斥锁(如std::mutex)一起使用,以确保线程安全。原创 2024-05-10 09:50:29 · 407 阅读 · 0 评论 -
C++traits
C++的标准库提供了,它定义了一些编译时基于模板类的接口用于查询、修改类型的特征:输入的时类型,输出与该类型相关的属性通过type_traits技术编译器可以回答一系列问题:它是否为数值类型?是否为函数对象?是不是指针?有没有构造函数?能不能拷贝构造等等type_traits技术还能对类型进行变换,比如给定的类型任意T,能为这个类型添加const修饰符、添加引用或指针等。而这一切都发生在编译时,过程中没有任何运行时开销。原创 2024-04-12 21:47:28 · 1360 阅读 · 0 评论 -
在线程间共享数据---互斥量
std::mutex是C++标准库中头文件中定义的一个类,它是实现多线程同步的基础工具,主要用于保护共享资源,防止多个线程同时访问同一资源造成的数据竞争(race condition)。std::mutex:通过调用lock()函数来获取互斥锁。如果互斥量此时未被任何线程锁定,则当前线程获得该锁,否则线程将阻塞(即挂起),直到互斥量可用。:通过调用unlock()函数释放互斥锁,使得其他等待该锁的线程有机会获得锁并继续执行。另外,std::mutex还提供了诸如try_lock()原创 2024-04-12 21:33:07 · 960 阅读 · 0 评论 -
C++IO
当运行这段程序后,将在指定路径下创建或覆盖一个名为 “output.txt” 的文件,并将写入的数据保存到该文件中。例如,你可以读取整数、浮点数、字符串等各种类型的数据,或者一次性读取整个文件内容。提供了处理字节或者字符流进行输入操作的功能,主要用于从各种类型的输入流中读取数据,比如从键盘(通过。例如,你可以写入整数、浮点数、字符串以及任何可以插入到输出流中的数据。的内容,向其中写入新的数据,并展示了如何交替进行读取和写入操作。的功能,既可以读取文件,也可以写入文件,因此它支持对文件进行双向访问。原创 2024-04-09 21:17:16 · 670 阅读 · 0 评论 -
C++socket相关IO
msghdr用于描述消息头的结构体,recvmsg,sendmsg中用到和:指向一个可选的地址结构(如sockaddr),以及地址结构的长度。在发送或接收带有源或目标地址信息的消息时使用,对于已连接的套接字通常不需要。msg_iov和msg_iovlen:指向一个iovec结构体数组及其长度,用于分散/聚集I/O操作,可以一次性发送或接收多个缓冲区的数据。和:指向附加控制信息(ancillary data)的缓冲区及其长度,可以携带如文件描述符、套接字选项等额外数据。msg_flags。原创 2024-04-09 20:20:45 · 1007 阅读 · 0 评论 -
C++ 异步库
开发者可以在主线程或其他线程发起一个异步操作,并能够在将来某个时刻查询操作的状态、等待操作完成或者获取操作的结果。(延迟执行,只有当获取未来对象的结果时才执行)以及默认策略(根据实现决定是立即执行还是延迟执行)。函数在一个单独的线程上异步执行,主线程可以继续执行其他任务,然后通过调用。被调用时,若值尚未准备好,则调用线程将阻塞,直到值被设置为止。是要异步调用的函数或者可调用对象,可以带任意数量的参数。的共享版本,允许多个拥有者共享一个异步计算的结果。函数打包,创建一个可以异步执行的任务,并通过。原创 2024-03-24 22:05:21 · 661 阅读 · 1 评论 -
C++异常处理
在C++中,你可以自定义异常类,通过继承标准库中的类或者其派生类来实现。自定义异常通常用于表示特定的错误或异常情况,这样可以更加精确地捕获和处理问题。// 自定义异常类public:// 构造函数,接收一个错误消息作为参数// 重写虚函数,返回异常信息private:// 存储异常消息if (...) {");在这个例子中,我们创建了一个名为的自定义异常类,它继承自,并覆盖了what()函数以返回自定义的错误消息。在。原创 2024-03-21 19:44:40 · 687 阅读 · 0 评论 -
C++不定参数模板、折叠表达式和类型推导
函数返回类型后置语法是C++11引入的新特性,它允许我们在函数声明或定义时将返回类型放在函数名后面,通过->符号分隔。是C++11中引入的一个标准库特性,它是一个类型 traits 类,用于推断给定函数对象在给定参数类型下调用后的返回类型。然而,从C++17开始,C++类型推导指的是编译器在编译期间自动确定变量或表达式的类型的能力。用于推导表达式的类型,它可以返回表达式在编译时的静态类型,包括顶层const、引用等修饰符。用于推导传入的可调用对象在给定参数类型时的返回类型,以便创建与任务结果类型相匹配的。原创 2024-03-18 15:03:17 · 608 阅读 · 1 评论 -
C++Lambda表达式
Lambda表达式是C++11及更新版本中引入的一种简洁、直观的创建匿名函数的方法。它允许在代码中快速定义并立即使用一个小型函数对象,而无需为其命名或写一个完整的函数定义。:捕获列表,用于决定lambda函数可以访问哪些外部变量。[][=][&][=,&this][&,this]this[x, &y]xy:参数列表,类似于普通函数的参数列表。mutable:可选关键字,表示即使lambda捕获的是外部变量的引用或副本,也可以在其主体内修改这些捕获的变量。原创 2024-03-18 15:00:22 · 437 阅读 · 0 评论 -
LinuxC++操作mysql数据库(#include <mysql/mysql.h>的使用)
1.安装mysql c++库2.安装mysql。原创 2024-03-11 18:37:43 · 980 阅读 · 0 评论 -
【C++】std::bind与functional函数对象
std::function 的实例能存储、复制及调用任何可复制构造的可调用目标——函数(通过其指针)、 lambda 表达式、 bind 表达式或其他函数对象,还有指向成员函数指针和指向数据成员指针。存储的可调用对象被称为 std::function 的目标。若 std::function 不含目标,则称它为空。调用空 std::function 的目标导致抛出 std::bad_function_call 异常。若 std::function 非空,则亦销毁其目标。返回指向存储的可调用函数目标的指针。原创 2023-12-16 19:12:05 · 1269 阅读 · 5 评论 -
【C++配置yaml】yaml-cpp使用
》》》原创 2023-12-16 13:14:29 · 846 阅读 · 0 评论 -
【C++】模板具体化、实例化、特化整理总结
用处:在多文件编译连接时生成实例。原创 2023-12-13 22:50:02 · 1599 阅读 · 12 评论 -
【C++】算法库(复制操作、交换操作、变换操作)
算法库提供大量用途的函数(例如查找、排序、计数、操作),它们在元素范围上操作。》》》》C++20 在命名空间 std::ranges 中提供大多数算法的受约束版本,在这些算法中,范围既可以由迭代器-哨位对,也可以由单个 range 实参指定,还支持投影和成员指针可调用对象。原创 2023-12-11 21:36:52 · 1996 阅读 · 21 评论 -
【C++】算法库(批量操作、搜索操作)
算法库提供大量用途的函数(例如查找、排序、计数、操作),它们在元素范围上操作。》》》》C++20 在命名空间 std::ranges 中提供大多数算法的受约束版本,在这些算法中,范围既可以由迭代器-哨位对,也可以由单个 range 实参指定,还支持投影和成员指针可调用对象。原创 2023-12-09 15:37:25 · 1402 阅读 · 18 评论 -
【C++】智能指针
智能指针可以帮助C++程序员管理动态分配的内存的,它会帮助我们自动释放new出来的内存,从而避免内存泄漏!智能指针不是指针,是一个管理指针的类,用来存储指向动态分配对象的指针,负责自动释放动态分配的对象,防止堆内存泄漏。动态分配的资源,交给一个类对象去管理,当类对象声明周期结束时,自动调用析构函数释放资源C++11后auto_ptr 已经被“抛弃”,改为unique_ptr替代!C++11后不建议使用auto_ptr,因此本位不从unique_ptr开始介绍头文件创建同模板类。原创 2023-12-08 12:53:53 · 1437 阅读 · 6 评论 -
【C++】指针与new的使用
1.new与delete必须成对使用,delete会释放指针指向的内存但不会删除指针本身。2.不要尝试释放已经释放的内存,delete只能释放new申请的内存。new用于动态申请存储空间,它比malloc更好。因此将指针自增加时会根据指向的内容进行自增。delete用于释放new申请的空间。原创 2023-12-08 12:51:42 · 644 阅读 · 2 评论 -
【C++】时间time库
linux下存储时间常见的有两种存储方式,一个是从1970年到现在经过了多少秒,一个是用一个结构来分别存储年月日时分秒的。time_t这种类型就是用来存储从1970年到现在经过了多少秒,要想更精确一点,可以用结构,它精确到微妙。struct tm结构体类型指针,这种结构体中分别定义了年月日时分秒等,我们可以利用它格式化输出。原创 2023-12-06 23:23:33 · 782 阅读 · 5 评论 -
【C++】Boost库LexicalCast模块介绍与使用
lexical_cast库进行”字面值“之间的通用转换头文件如果我们想要将lexical_cast应用于自定义的类,需要实现流操作符operator自定义类转字符串public:private:public :字符串转自定义类public:x_ = pt.x_;float x_;参考资料1参考资料2。原创 2023-12-06 23:21:11 · 968 阅读 · 0 评论 -
【C++】atomic原子操作
C++中原子变量(atomic)是一种多线程编程中常用的同步机制,它能够确保对共享变量的操作在执行时不会被其他线程的操作干扰,从而避免竞态条件(race condition)和死锁(deadlock)等问题。C++11起提供了atomic,可以使用它定义一个原子类型。原创 2023-12-05 15:14:27 · 1348 阅读 · 9 评论 -
【C/C++】可变参数va_list与格式化输出
va_list是在C语言中解决变参问题的一组宏,变参问题是指参数的个数不定,可以是传入一个参数也可以是多个用法:在函数里定义va_list 型的变量 ,这个变量是指向参数的指针 ,通过指针运算来调整访问的对象。原创 2023-12-05 14:43:59 · 544 阅读 · 0 评论 -
【C++】define宏定义
define是C语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本;原创 2023-11-28 22:14:33 · 1242 阅读 · 12 评论 -
【C++】enum枚举与强类型枚举
C++的enum工具提供了一种创建符号常量的方式,这种方式可以替代const。枚举类型定义用关键字enum标识。原创 2023-11-28 22:10:46 · 733 阅读 · 0 评论 -
【C++11】default、delete与Noncopyable
在C++11标准中,可以使用default关键字来显式地声明默认的构造函数和析构函数。使用default关键字可以用来显式声明默认的构造函数和析构函数。这样做可以让编译器自动生成默认实现–>->->原创 2023-11-23 22:55:26 · 921 阅读 · 5 评论 -
【C++设计模式】单例模式singleton
单例模式是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。优点:内存中只有一个实例,减少内存开销;避免对资源多重占用;设置全局访问点,严格控制访问。缺点:没有接口,扩展困难;如果要扩展单例对象,只有修改代码,没有其他途径,不符合程序的开闭原则。原创 2023-11-23 22:50:34 · 1265 阅读 · 1 评论 -
【C++对象模型】构造函数III
构造函数语义学原创 2023-11-11 15:28:17 · 271 阅读 · 1 评论 -
【C++对象模型】构造函数II
有三种情况,会以一个object的内容作为另一个class object的初值。1.直接拷贝2.函数传参3.函数返回假设class设计者显式定义了一个拷贝构造函数那么在大部分情况下,上述的拷贝构造函数会被调用。原创 2023-11-11 14:40:28 · 74 阅读 · 1 评论 -
【C++对象模型】构造函数
C++Annotated Reference Manual告诉我们:“默认构造函数……在需要的时候被编译器产生出来”。关键字眼是“在需要的时候”。被谁需要?做什么事情?有一个默认构造函数,可以将它的两个members初始化为0。上面这段代码可曾符合ARM所说的“在需要的时候”?答案是 no。其间的差别在于一个是程序的需要,一是编译器的需要。程序如果有需要,那是程序员的责任;本例要承担责任的是设计class Foo的人那么,什么时候才会合成出一个默认构造函数呢?当编译器需要它的时候!原创 2023-11-11 01:19:14 · 670 阅读 · 0 评论 -
【C++20】模块
使用import语句可以导入一个已有的模块,并使用那个模块中导出的接口。定义一个模块也相当简单,通常一个模块由一个接口文件和零到数个源文件组成,如果程序员在一个接口文件中声明并实现所有接口,那么也可以不再提供源文件。创建一个数学模块,它通过math.mpp提供接口文件,内容如下//使用export module表达对外模块名,同时表明这是一个接口文件export template//导出的一个接口过在接口文件中使用“export module模块名;原创 2023-11-03 13:49:11 · 339 阅读 · 15 评论 -
【C++20】协程
协程提供了一种协作式的多任务模型,在并发计算领域,它通常比多线程或多进程要高效得多。C++20中的协程仅提供了机制,而没有提供标准库的支持,这可能会在下一个标准C++23中提供,这里将主要介绍协程的机制。函数只有两个行为:调用与返回。一旦函数返回后,它在栈上所拥有的状态将被销毁。协程相比函数多了两个动作:挂起与恢复。原创 2023-10-12 21:57:47 · 238 阅读 · 0 评论 -
【C++20】ranges标准库
ranges是对一系列数据的抽象,只有有头有尾,它既可以是一个有界容器,也可以是一个无穷列表.一旦有了这种抽象,就可以进一步构造range的适配器,它能够被管道操作符进行组合,以便对数据进行灵活的处理,而这些处理都是延迟计算的通过iota创建一个从1开始的无穷数列ranges,随后与各个适配器进行组合处理,transform对ranges中的每个数进行求平方操作,对平方的结果通过filter进行过滤,过滤条件为奇数,最终的奇数交给take_while处理,取所有小于1000的奇数。原创 2023-10-11 01:01:22 · 438 阅读 · 0 评论 -
【C++20】constexpr元编程
通过constexpr定义的变量,通常可以代替使用宏定义的常量,并且能保证类型安全一般使用constexpr定义一些常量用于指定数组最大长度.使用constexpr修饰的对象,也可以看作是const的constexpr与const的区别在于,前者需要保证表达式可在编译时求值,否者会出现编译错误,而后者只是表达变量拥有常量性,若能在编译时求值,也可用于计算上下文,否者将于运行时求值。原创 2023-10-03 12:54:04 · 156 阅读 · 0 评论 -
【C++20】概念约束
concept : 它是一个对类型约束的编译期谓词,给定一个类型判断其是否能满足语法和语义要求符号C<T>中的C就是概念,T是一个类型,它表达"如果T满足C的所有要求,那么为真,否则为假"概念被定义为约束表达式,也可以理解成布尔常量表达式概念和模板using的别名很类似,前者是对布尔类型表达式的别名,而后者是对模板类型的别名,它们都不允许自身进行实例化或特例化在判断类型是否满足概念时,编译器将会对概念定义的约束表达式进行求值,如果在定义概念时表达式类型不为bool类型,将引发一个编译错误。原创 2023-09-26 22:47:39 · 101 阅读 · 0 评论 -
【C++20】编译时多态
c++中支持函数重载与名称空间,使得多个同名函数成为可能。原创 2023-09-13 01:34:15 · 69 阅读 · 1 评论 -
【C++20】类型与对象
返回某个类型T的右值引用,令在 decltype 表达式中不必经过构造函数就能使用成员函数,不管该类型是否有默认构造函数或者该类型是否可以创建对象,返回某个类型T的右值引用,这个动作是在编译时完成的,所以很多人把std::declval也称为编译时工具。copy_if接受一个输入迭代器区间和一个输出迭代器,接受一个单参的谓词函数(返回类型为bool的函数),对输入迭代器的每个区间进行谓词调用,若为真则把这个元素复制到输出迭代器上。1.《C++20高级编程》罗能。2.绑定类的成员函数。原创 2023-09-07 23:58:33 · 74 阅读 · 1 评论