guts的小屋
  • 首页
  • 归档
  • 分类
  • 标签

lambda表达式、std::function与std::bind

lambda表达式lambda表达式是C++11引入的特性,允许定义匿名函数,简化参数的传递 1auto func = [capture](params) opt -> ret { func_body; } capture 捕获列表用于捕获lambda表达式所处的作用域中的外部变量 [] 不捕获任何变量 [] 按引用所有外部捕获变量 [=] 按值捕获所有外部变量 [=,
2025-06-22
C++

C++ 内存对齐

1234567891011121314151617181920#include <iostream>#include <cstdint>#include <iomanip>struct A { int16_t a; //#include <cstdint> int64_t b; float c;};int main() {
2025-06-20
C++

进程间通信

基本概念进程间通信(IPC,InterProcess Communication)指的是在不同进程之间传播信息的过程,常见的IPC方式有 管道 匿名管道 命名管道 消息队列 共享内存 信号量 信号 文件 Socket 传输模式 单工 Simplex只允许一方向另一方传输信息,而另一方不能向一方传输 全双工 Full Duplex发送数据的同时也能够接受数据,二者可以同步进行。 半双工 Ha
2025-06-19
操作系统

C++拷贝消除 Copy Elision

拷贝消除在广义上,指满足一定条件时,编译期允许省略对临时对象的拷贝或移动操作。在C++17之前,对于这一特性都是“允许但不要求”,但绝大多数主流的编译器都会启用。从C++17开始,只要满足条件,对prvalue的拷贝/移动省略都是必选的。 一般来说,拷贝消除包含 返回值优化 RVO(Return Value Optimization) 具名返回值优化(Named Return Valu
2025-06-17
C++
#语言特性

SFINAE

SFINAE,即替换失败不是错误(Substitution Failure Is Not An Error)。​它指的是在模板实例化过程中,如果某个替换导致了无效代码,这种情况不会被视为编译错误,编译器会忽略这个候选项,继续寻找其他的模板重载或特化版本。 基本原理当编译器尝试实例化一个模板时,它会进行参数替换。如果这个替换过程失败了(比如因为某个类型不支持某个操作),这种失败并不会直接导致编译错误
2025-06-16
C++
#语言特性

C++中的继承与多态

继承基本概念C++中的类可以通过继承别的类来定义,这能够大幅提高代码的复用效率。继承的语法为 1class newClass : 访问修饰符 baseClass{}; 根据访问修饰符,类的继承分为 公有继承 不改变基类中成员的访问属性 保护继承 将基类的public和protected成员都变成protected 私有继承 将基类的public和protected成员都变成
2025-06-14

RAII

什么是RAIIRAII,Resource Acquisition Is Initialization,资源获取即初始化,是C++中很重要的编程思想,它将资源的声明周期和对象的生命周期绑定到一起,在构造函数请求资源,在析构函数释放资源并且绝不抛出异常。C++中的STL基本都遵循RAII规范,例如vector, string, lock_guard, unique_lock, shared_ptr,
2025-06-13
C++

C++中运算符的重载

概念C++中运算符可以通过下面的方式重载,从而为自定义类型定义运算。 1返回类型 operator运算符(参数列表); 可以重载的运算符包括 算术运算符(+、-、*、/) 关系运算符(==、!=、<、>) 赋值运算符(=) 插入流和提取流运算符(<<、>>) 等。 运算符重载实例1. 算术运算符(+、-、*、/)12345678910111213141516
2025-06-13
C++

C++中的static关键字

static的引入static是C++中的修饰符,可以修饰变量和函数,用来控制变量的存储方式和可见性。 一般情况下,函数内部的变量,在程序运行到它的定义时,会在栈内为其分配内存,在函数执行结束后释放。如果我们想要某些变量(例如记录函数调用次数的变量)的生命周期不局限于函数执行期间,在执行结束后不释放而是继续保留,并且在同时确保将其作用域限制在函数内部,那么一般的变量和全局变量(虽然生命周期不局限于
2025-06-13
C++

C++类型转换

C风格强制类型转换C语言中强制类型转换的方式为 1(type_name) expression 例如 1234567891011#include <stdio.h> int main(){ int sum = 17, count = 5; double mean; mean = (double) sum / count; printf("Value
2025-06-13
C++
1234

搜索

Hexo Fluid