C++的新特性随着版本的更新而不断增加,以下是一些主要的新特性及其简单举例:
C++11新特性
- 自动类型推导(auto):
- 引入auto关键字,编译器可以根据初始化表达式自动推导变量的类型。
- 举例:
auto x = 10;
// x会被推导为int类型。
- 范围for循环(Range-based for loop):
- 提供了一种更简洁、安全的遍历容器和数组的方式。
- 举例:
std::vector<int> numbers = {1, 2, 3, 4, 5}; for(int num : numbers) { std::cout << num << " "; }
- nullptr关键字:
- 引入nullptr关键字,代表空指针,替代了传统的NULL宏。
- 举例:
int* ptr = nullptr;
- lambda表达式:
- 可以在代码中定义匿名函数,简化函数对象的创建和使用。
- 举例:
auto func = [](int x, int y) { return x + y; }; std::cout << func(10, 20) << std::endl;
- 智能指针:
- 引入了
std::unique_ptr
和std::shared_ptr
等智能指针,自动管理内存的生命周期。 - 举例:
std::shared_ptr<int> ptr = std::make_shared<int>(10);
- 引入了
- 右值引用和移动语义:
- 引入右值引用(
&&
)和移动构造函数,实现资源的高效转移,避免不必要的拷贝操作。 - 举例:
std::vector<int> vec1(1000); std::vector<int> vec2 = std::move(vec1);
- 引入右值引用(
- 类型别名(Type Aliases):
- 使用
using
关键字定义类型别名,提高代码可读性和可维护性。 - 举例:
using MyInt = int;
- 使用
- 统一初始化:
- 可以使用花括号
{}
初始化对象,语法更加统一和简洁。 - 举例:
int x{10}; std::vector<int> v = {1, 2, 3, 4, 5};
- 可以使用花括号
- 线程支持库:
- 引入了对多线程编程的支持,包括线程、互斥锁、条件变量等。
- 举例:
std::thread t(printThreadId); t.join();
C++14新特性
- 泛型lambda表达式:
- lambda表达式现在可以使用auto关键字来声明参数,使其更灵活和通用。
- 举例:
auto func = [](auto x, auto y) { return x + y; };
- 返回类型推导:
- 在函数的返回类型可以使用auto关键字进行推断,无需显式指定。
- 举例:
auto add(int a, int b) { return a + b; }
- 变量模板:
- 类似于函数模板,可以定义变量模板,使得变量的类型可以根据模板参数自动推断。
- 举例:
template<typename T> constexpr T pi = T(3.1415926535897932385);
C++17新特性
- 结构化绑定:
- 可以将元组或其他复合类型的成员绑定到命名变量,提供了更方便的访问方式。
- 举例:
auto [x, y] = std::make_pair(1, 2);
- if constexpr语句:
- 允许在编译时根据条件来选择性地编译不同的代码块。
- 举例:
if constexpr (std::is_same_v<T, int>) { /* handle int case */ }
- 折叠表达式:
- 简化了对参数包进行展开操作的语法,使得代码更简洁和易读。
- 举例:
(args + ...)
// 对参数包args中的元素进行累加
C++20新特性
- 概念(Concepts):
- 引入概念,用于对模板参数进行约束和限定,提供了更清晰和可读性强的模板编程方式。
- 举例:
template<typename T> concept Integral = std::is_integral_v<T>;
- 范围for循环的改进:
- 引入了
std::ranges
命名空间,提供了更丰富的范围操作函数和算法。 - 举例:
for (auto& elem : std::views::reverse(vec)) { /* process elem */ }
- 引入了
- 协程(Coroutines):
- 引入协程机制,使得异步编程更加简洁和直观。
- 举例:
std::generator<int> generate_sequence(int n) { co_return n; }
这些新特性使得C++更加现代化、易用且强大。随着版本的更新,C++持续为开发者提供更多工具和技术来编写高效、安全的代码。