avatar
文章
39
标签
81
分类
8
首页
STM32专栏
算法题
C++
嵌入式
关于我
CJJ的小站
搜索
首页
STM32专栏
算法题
C++
嵌入式
关于我

CJJ的小站

C++ constexpr:让计算发生在"编译期"
发表于2026-10-13|C++学习
constexpr = 编译期可求值。标记变量 / 函数 / 构造函数,告诉编译器:这个东西能在编译阶段就算出结果,而不是等到程序运行时才算。 区分:const 只是"只读",不一定编译期求值;constexpr 强调"可以编译期计算"。 一、const vs constexpr:最容易混的一对 关键字 含义 求值时机 const 只读,不能改 可以运行时求值 constexpr 编译期可计算 优先编译期求值,也支持运行调用 简单记忆: const:不能写(只读); constexpr:能在编译期算。 12constexpr double pi = 3.1415926; // 编译期常量const double pi2 = 3.1415926; // 只读常量,语义不同 二、constexpr 变量12constexpr int val = 2 * 2 * 2 * 2; // 编译期直接算出 16,运行时不算int arr[val]; ...
C++ decltype
发表于2026-10-13|C++学习
decltype 是 C++11 引入的关键字:推导表达式的类型,编译期就确定,不执行表达式。 1decltype(表达式) // 拿到表达式对应的类型 一句话:decltype 问编译器"这个表达式是什么类型",编译器如实回答。和 auto 看上去很像,但保留引用 / 顶层 const,比 auto 更精确。 一、四条基础规则decltype(expr) 的推导结果取决于括号内表达式的类型 + 值类别: 表达式 expr 的形态 decltype(expr) 推导结果 变量名(裸的标识符) 变量声明时的类型(含引用) 左值表达式(非变量名) T&(左值引用) 纯右值 T(普通类型) 将亡值(std::move(x) 这类) T&&(右值引用) 简单记:只有"裸的变量名"按字面理解,其他表达式都按值类别加引用。 二、decltype(x) vs decltype((x)):最经典的坑1234int x = 10;decltype(x) a; /...
一些信息和规划
发表于2026-10-13|个人规划
这一篇是个人向的时间线 + 资源汇总,包含关键考试节点、考研 / 留学路线、英语递进、竞赛优先级、签证对比。信息会随时间更新,仅供参考。 一、一些信息和规划 基准:你现在:2026级本科新生(大一) 本科校内必修类 大学英语四级(CET4) 可报考时间:大一下学期(6月)、大二上(12月),大部分学校大一上不让报 合格线:425;目标:≥500,对保研、复试、留学文书加分 大学英语六级(CET6) 报考前提:四级≥425;考试:每年6/12月 目标:≥480;≥550含金量更高,很多国内考研复试、夏令营看六级 专业课期末:C语言/C++、离散数学、数据结构、操作系统、计算机网络、数据库、算法(考研核心专业课) 计算机二级(非强制,可选):C/C++,低年级拿,简历加分 竞赛&能力认证(对你CS+生物交叉方向很有用,不是必须考试) 蓝桥杯:每年4月省赛,5月国赛;C++算法,考研复试加分 全国大学生数学建模:每年9月;生信/计算生物学非常看重这个,跨学科项目 PAT计算机能力测试(浙大):3/9/12月,计算机考研/求职加分 软考(可选):软件设计师,每年...
位移运算:<<、>>、算术右移 vs 逻辑右移
发表于2026-10-13|计算机基础
C/C++ 里所有位运算(移位 >> <<、& | ^ ~),全部是对【补码】进行操作,不是原码。计算机内存里整数永远以补码形式存放,位运算直接操作内存里的二进制比特(补码)。 想要搞懂"补码为什么是补码",可以先看《原码、反码、补码:为什么计算机只用"加法"就能做减法》那一篇。 一、左移 <<向左移动一位,移出去的位舍去,右边补 0。 12int a = 26;int b = a << 1; // 52 直观理解:a << n 相当于 a * 2^n(在 不溢出的前提下)。 1.1 负数左移也要算补码12-26 的原码:10011010-26 的补码:11100110 -26 << 1: 12补码左移:11100110 → 11001100(最高位的 1 移出去,最低位补 0) 把 11001100 当补码读回十进制:−52。 左移没有"算术 / 逻辑"之分——不管正负数,移出去的位都丢,右边一律补 0。 二、...
STM32 TIM 定时器:让 CPU 解放双手
发表于2026-10-12|STM32学习
定时器(TIM)是 STM32 里最常用、最强大的外设之一。它能对输入的时钟进行计数,并在数值达到设定值时触发中断——本质就是一个硬件计数器。 这一篇只整理通用定时器最常用的部分:基本定时、PWM 输出(如果你想补全这一节,可以写在下面留白处)。 一、定时器能干什么 用途 说明 定时中断 每隔固定时间进一次中断,做周期性任务(LED 闪烁、按键扫描) 输出比较 / PWM 输出可变占空比的方波,驱动电机、舵机、LED 调光 输入捕获 测量外部信号的频率 / 占空比 / 脉宽 编码器接口 读取旋转编码器的旋转方向与速度 二、几个核心概念2.1 时钟源定时器由内部时钟(CK_INT) 或外部信号驱动。对应的预分频器把时钟频率降到"想要的计数频率"。 2.2 三个关键寄存器(概念) 寄存器 / 参数 作用 PSC(预分频器 Prescaler) 把输入时钟先除一下:CK_CNT = CK_PSC / (PSC + 1) CNT(计数器 Counter) 当前计数值,从 0 累加到 ARR 就触发事件 A...
C++ std::sort:从基础排序到自定义比较函数
发表于2026-10-12|C++学习
头文件:<algorithm> 一句话:对 [first, last) 左闭右开区间排序。 C++11 之后标准规定:sort 是不稳定排序,实现一般是 introsort(内省排序 = 快速排序 + 堆排序 + 插入排序三者结合)。时间复杂度:$O(N \log N)$。 一、函数原型1234567// 版本 1:默认升序,用 < 比较template< class RandomIt >void sort( RandomIt first, RandomIt last );// 版本 2:自定义比较函数 cmptemplate< class RandomIt, class Compare >void sort( RandomIt first, RandomIt last, Compare comp ); ⚠️ 区间是 [first, last)——包含 first,不包含 last。数组/vector 排序一般写 sort(a.begin(), a.end())。 二、基础示例123456789101112#include <...
C++ STL 速查:容器、适配器与配对类型
发表于2026-10-12|C++学习
STL(Standard Template Library,标准模板库)= 容器 + 算法 + 迭代器 + 仿函数 + 配对类型。这一篇只整理容器与配对类型——按"序列 / 关联 / 无序 / 配对"分组,每种给最常用接口 + 易错点。 一、vector:动态数组头文件:<vector> std::vector<T> 是动态可变长的顺序容器,底层单一整块连续内存。 1.1 insert vs emplace:少一次拷贝123456789101112131415161718192021222324252627#include <iostream>#include <vector>using namespace std;struct Student { int id; string name; Student(int i, string n) : id(i), name(n) { cout << "构造 Student\n"; ...
C++ 类型转换:从「隐式转换」到「四种命名转换」
发表于2026-10-12|C++学习
C++ 的类型转换分为两类:隐式转换(编译器自动做)和显式转换(程序员主动写)。其中显式转换又分为 C 风格 (T)expr 和 C++ 风格的四种命名转换 static_cast / dynamic_cast / const_cast / reinterpret_cast。 核心原则:能用隐式就别显式;显式里能用 static_cast 解决的,就别用 reinterpret_cast。 一、隐式转换不需要任何运算符,当一个值赋给另一个兼容类型时会自动发生。 1.1 数值类型自动提升1234int a = 2;double d = a; // int → double,自动char c = 'A';int x = c; // char → int 1.2 派生类指针 → 基类指针12345678class A {};class B : public A {};int main() { B* pSub = new B(); A* pBase = pSub...
C++ 函数指针:把"函数"当"值"传来传去
发表于2026-10-12|C++学习
函数指针就是指向函数的指针变量。函数在内存里同样有地址,所以可以像变量一样被指针"指向",进而作为参数传递、存到数组里、运行时切换调用。 一、声明函数指针语法:返回类型 (*指针名)(参数列表); 12345678910111213141516171819202122#include <iostream>using namespace std;double multiply(double a, double b) { return a * b;}double add(double a, double b) { return a + b;}int main() { // 声明一个「指向返回 double、参数 (double, double) 函数」的指针 double (*ptr)(double a, double b) = multiply; double res = ptr(4.2, 1.5); // 调用 multiply,res = 6.3 pt...
C++ 函数封装与绑定:std::function、std::bind、std::placeholders
发表于2026-10-12|C++学习
STL 标准库里提供了一些函数包装与绑定模板,可以把"可调用对象"统一包装成一种类型,方便在函数之间传来传去、当作回调。 一、std::function:可调用对象包装器头文件:#include <functional> std::function<R(Args...)> 是可调用对象包装器。一句话:可以把普通函数、lambda、函数对象、成员函数全部包装成同一个类型,统一调用。 模板参数 R(Args...) 中: R:返回值类型 Args...:参数列表(可变参数包) 1.1 能包装哪些东西 可调用类型 是否能包装进 function 普通全局函数 ✅ Lambda 表达式 ✅(带不带捕获都行) 重载了 operator() 的函数对象(仿函数) ✅ 类成员函数 / const 成员函数 ✅(需要额外处理 this) 1.2 基础示例:包装普通函数12345678910111213141516171819#include <iostream>#include <functi...
12…4
avatar
CJJ
CJJ的个人博客,分享技术分析和生活记录
文章
39
标签
81
分类
8
Follow Me
最新文章
C++ constexpr:让计算发生在"编译期"2026-10-13
C++ decltype2026-10-13
一些信息和规划2026-10-13
位移运算:<<、>>、算术右移 vs 逻辑右移2026-10-13
STM32 TIM 定时器:让 CPU 解放双手2026-10-12
分类
  • C++学习20
  • STM32学习1
  • 个人规划1
  • 嵌入式学习5
  • 工具1
  • 日常1
  • 算法学习7
  • 计算机基础3
标签
锁 类型转换 智能指针 随笔 逆序对 NVIC C++11 预处理 异或 继承 面向对象 模板 边界 数学 函数指针 考研 运算符重载 签证 英语 定时器 内存管理 友元 数据结构 栈 HAL 容器 最小公倍数 数论 多态 EXTI 编译期 类型推导 GPIO 宏定义 RAII 函数模板 STL 版本控制 STM32 贪心
归档
  • 十月 2026 15
  • 九月 2026 24
网站信息
文章数目 :
39
本站访客数 :
本站总浏览量 :
最后更新时间 :
© 2025 - 2026 By CJJ框架 Hexo 8.1.2|主题 Butterfly 5.7.0
搜索
数据加载中