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++ 代码。