c++11 新特性总结【c++】

C++11引入了许多新特性,使得C++编程更加简洁、高效和现代化。以下是C++11中一些重要的新特性:

1. 自动类型推导(auto)

auto关键字允许编译器根据初始化表达式自动推导变量的类型,减少了代码中的冗余。

auto intVar = 42;      // intVar 被推导为 int 类型
auto doubleVar = 3.14; // doubleVar 被推导为 double 类型

2. 范围for循环(Range-based for Loop)

范围for循环提供了一种更简洁的遍历数组或容器的方式。

std::vector vec = {1, 2, 3, 4, 5};
for (auto num : vec)
{
    std::cout << num << " ";
}

3. Lambda表达式

Lambda表达式(匿名函数)允许在函数内部定义小型函数对象,适用于排序、过滤等场景。

auto add = [](int a, int b) { return a + b; };
std::cout << add(2, 3); // 输出 5

4. 智能指针

C++11引入了std::unique_ptrstd::shared_ptr,提供自动管理内存的功能,防止内存泄漏。

std::unique_ptr ptr = std::make_unique(10);
std::shared_ptr sharedPtr = std::make_shared(20);

5. 右值引用和移动语义

右值引用(&&)允许函数通过移动语义实现高效的资源转移,减少不必要的拷贝。

std::vector vec1 = {1, 2, 3};
std::vector vec2 = std::move(vec1); // vec1 被“移动”到 vec2 中

6. constexpr

constexpr关键字用于声明常量表达式,在编译时计算其值,确保高效的代码执行。

constexpr int square(int x) { return x * x; }
constexpr int result = square(5); // result 在编译时被计算为 25

7. 新型初始化方式

C++11引入了统一的花括号{}初始化,提供了更一致和安全的初始化方式。

int arr[] = {1, 2, 3};        // 数组初始化
std::vector vec = {1, 2, 3}; // 容器初始化

8. 线程库

C++11新增了库,提供了对多线程编程的标准支持,包括线程创建、互斥锁、条件变量等。

#include 

void printHello()
{
    std::cout << "Hello, World!";
}

int main()
{
    std::thread t(printHello);
    t.join(); // 等待线程t完成
    return 0;
}

9. nullptr

nullptr取代了传统的NULL宏,提供了一种类型安全的空指针表示法。

int* ptr = nullptr;

10. 静态断言(static_assert)

static_assert允许在编译时进行断言,确保程序的某些条件在编译期得到验证。

static_assert(sizeof(int) == 4, "int size is not 4 bytes");

11. enum class(强类型枚举)

enum class引入了强类型的枚举,避免传统枚举类型中不同枚举值之间的混淆。

enum class Color { Red, Green, Blue };
Color color = Color::Red;

 

12. std::arraystd::tuple

C++11新增了std::arraystd::tuple,提供了更现代化和灵活的数组与多元组支持。

std::array arr = {1, 2, 3};
std::tuple tpl(1, 2.0, "Hello");

C++11引入的这些特性大大增强了语言的表达能力和安全性,同时提高了编写高效代码的便捷性。这些特性在现代C++开发中已广泛应用,为开发者提供了更多的工具和更灵活的编程方式。 

你可能感兴趣的:(IT生涯,c++,开发语言)