Skip to content

Commit 8d785b1

Browse files
polish the passage a little
1 parent bfe237f commit 8d785b1

2 files changed

Lines changed: 0 additions & 49 deletions

File tree

tutorial/核心:现代嵌入式C++教程/Chapter11/6 指定初始化器.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -885,5 +885,3 @@ static_assert(uart_pins[0].port == 0);
885885
- 可以放心在性能关键代码中使用
886886

887887
指定初始化器让C++的配置代码更接近声明式编程风格,配合`constexpr`可以在编译期完成大量配置工作,是现代C++嵌入式开发的重要工具。配合前面学过的auto、结构化绑定、属性等特性,我们可以写出既高效又易维护的嵌入式C++代码。
888-
889-
到这里,关于C++实用语言特性的介绍就告一段落了。下一章我们将深入探讨**三路比较运算符(Spaceship Operator,C++20)**,看看这个来自Perl/Ruby的特性如何简化我们的比较逻辑。

tutorial/核心:现代嵌入式C++教程/Chapter11/7 用户定义字面量.md

Lines changed: 0 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -989,50 +989,3 @@ constexpr auto operator"" _units(long double value) {
989989
// 只接受数值类型
990990
static_assert(Numeric<decltype(1.0_units.value)>);
991991
```
992-
993-
------
994-
995-
## 小结
996-
997-
用户定义字面量是现代C++中强大而优雅的特性:
998-
999-
**UDL形式总结**:
1000-
1001-
| 形式 | 参数类型 | 用途 | 示例 |
1002-
|------|---------|------|------|
1003-
| 整型cooked | `unsigned long long` | 数值转换 | `123_hex` |
1004-
| 浮点cooked | `long double` | 物理单位 | `3.3_V` |
1005-
| 字符串原始 | `const char*, size_t` | 自定义格式 | `1010_bin` |
1006-
| 字符cooked | `char` | 字符处理 | `'a'_escape` |
1007-
1008-
**实践建议**:
1009-
1010-
1. **优先使用场景**:
1011-
- 时间单位(`100ms`、`1s`)
1012-
- 频率单位(`1kHz`、`1MHz`)
1013-
- 内存单位(`1KB`、`1MB`)
1014-
- 物理单位(`3.3V`、`100mA`)
1015-
- 编译期常量(配置值)
1016-
1017-
2. **设计原则**:
1018-
- 使用`constexpr`实现编译期计算
1019-
- 后缀必须以下划线开头
1020-
- 将UDL放在独立的命名空间中
1021-
- 使用清晰的、描述性的后缀名
1022-
- 考虑使用整数表示避免浮点精度问题
1023-
1024-
3. **嵌入式特别关注**:
1025-
- 所有转换应该在编译期完成(零运行时开销)
1026-
- 使用`static_assert`验证编译期约束
1027-
- 可以直接生成寄存器配置值
1028-
- 类型安全防止单位混淆
1029-
1030-
4. **性能优势**:
1031-
- 完全编译期计算,无运行时成本
1032-
- 类型安全避免运行时错误
1033-
- 代码可读性大幅提升
1034-
- 易于维护和重构
1035-
1036-
UDL让C++代码可以像物理公式一样直观表达,同时保持类型安全和零开销。在嵌入式开发中,合理使用UDL可以显著提高代码质量和开发效率。配合前面学过的`constexpr`、模板元编程等技术,现代C++已经成为一门既强大又适合嵌入式开发的系统编程语言。
1037-
1038-
下一章我们将深入探讨**模块(Modules,C++20)**,看看这个革命性的特性如何彻底改变我们的代码组织和编译方式。

0 commit comments

Comments
 (0)