c++23 部分新特性:字符串与字符处理、容器与算法增强、并行与异步编程 等等

发布时间:2025-05-14      访问量:40
C++ 23 作为 C++ 标准的又一次重要更新,引入了许多实用的新特性和改进。以下是一些主要的新特性介绍:

1. **字符串与字符处理**
- **`std::string::starts_with/ends_with`**:直接检查字符串是否以特定前缀或后缀开始/结束。
- **`std::string::contains`**:检查字符串是否包含特定子串。
- **`std::to_underlying`**:将枚举值转换为其底层类型(替代 `static_cast`)。

2. **容器与算法增强**
- **`std::erase`/`std::erase_if`**:直接从容器中移除满足条件的元素(无需手动处理迭代器失效问题)。
- **`std::map::contains`**:直接检查键是否存在(替代 `find` 或 `count`)。
- **范围库增强**:增加了 `std::views::split`、`std::views::join` 等适配器。

3. **并行与异步编程**
- **协程改进**:
- 引入 `std::generator` 作为轻量级协程返回类型。
- 支持 `std::task` 作为异步任务模型。
- **并行算法扩展**:增强了 `std::execution` 策略,支持更多并行模式。

4. **元编程与反射**
- **`std::is_constant_evaluated()`**:在编译时判断表达式是否在常量求值上下文中执行。
- **模板增强**:
- 支持模板参数的 `auto` 类型(`template <auto... Args>`)。
- 引入 `std::type_identity` 作为类型操作工具。

5. **文件系统与 I/O**
- **`std::filesystem::path` 改进**:增加了 `remove_filename()`、`replace_extension()` 等实用方法。
- **`std::print`/`std::println`**:格式化输出函数(类似 Python 的 `print`)。

6. **智能指针与内存管理**
- **`std::make_shared_for_overwrite`**:创建未初始化内存的 `shared_ptr`,适用于后续填充数据。
- **`std::expected`**:用于函数返回值,替代可能的异常或错误码。

7. **其他改进**
- **`std::syncstream`**:线程安全的输出流包装器。
- **`std::source_location`**:获取源代码位置信息(如文件名、行号)。
- **`std::semaphore`** 和 **`std::latch`**:同步原语,简化多线程协调。

示例代码
下面是一些 C++ 23 新特性的简单示例:

cpp #include <iostream> #include <string> #include <vector> #include <algorithm> #include <print> #include <filesystem> #include <expected> namespace fs = std::filesystem; // 使用 std::print void demo_print() { std::print("Hello, {}! You have {} messages.\n", "Alice", 3); } // 使用 starts_with/ends_with/contains void demo_string() { std::string str = "Hello, World!"; if (str.starts_with("Hello")) { std::println("Starts with 'Hello'"); } if (str.contains("World")) { std::println("Contains 'World'"); } } // 使用 std::erase void demo_erase() { std::vector<int> vec = {1, 2, 3, 4, 5}; std::erase(vec, 3); // 移除所有值为3的元素 for (auto v : vec) { std::print("{} ", v); } std::println(""); } // 使用 std::expected std::expected<int, std::string> divide(int a, int b) { if (b == 0) { return std::unexpected("Division by zero"); } return a / b; } int main() { demo_print(); demo_string(); demo_erase(); // 使用 std::expected if (auto result = divide(10, 2); result.has_value()) { std::println("10 / 2 = {}", *result); } else { std::println("Error: {}", result.error()); } // 文件系统操作 fs::path p = fs::current_path() / "test.txt"; std::println("File path: {}", p.string()); return 0; }

C++ 23 的这些新特性进一步提升了代码的简洁性、安全性和性能,同时减少了样板代码,让开发者能够更高效地编写现代 C++ 代码。
堆内存
多线程
strdup
初始化器
冒泡排序
增删改查
BufferedReader
输入输出
面向对象
生命周期
闭包的概念
原型链
Flask
mysql-connector-python
单例模式
浅拷贝
隔离级别
索引
InnoDB
左连接
聚合函数
PuTTY
TRUNCATE
str_starts_with_many
DateTime
array_combine
闭包的概念