当前位置:首页 C++ > 正文

C++ 11有哪些新特性

作者:野牛程序员:2023-07-15 13:06:37 C++阅读 2713

C++11是C++编程语言的第11个标准,引入了许多新特性和改进。以下是C++11的一些主要特性:

  1. 自动类型推导(Auto):引入了auto关键字,可以自动推导变量的类型。

  2. 统一的初始化语法:允许使用列表初始化(initializer list)语法来初始化变量和对象。

  3. 范围-based for循环:引入了基于范围的for循环,用于遍历容器中的元素。

  4. nullptr关键字:引入了nullptr关键字,用于表示空指针。

  5. 强类型枚举(Strongly-typed enums):枚举类型支持了作用域限定、前置声明以及底层类型的指定。

  6. lambda表达式:引入了lambda表达式,允许在代码中定义匿名函数。

  7. 移动语义(Move semantics):通过引入右值引用(rvalue reference)和移动构造函数(move constructor)来实现资源的高效转移。

  8. 多线程支持:引入了对多线程编程的原生支持,包括线程、互斥量、条件变量等。

  9. 智能指针(Smart pointers):引入了shared_ptr和unique_ptr等智能指针,用于管理动态分配的内存,避免内存泄漏。

  10. 类型推导模板(Template type inference):在模板函数的调用中,允许省略模板参数。

  11. 正则表达式支持:引入了正则表达式库,提供了对正则表达式的解析和匹配功能。

  12. 并发编程库(Concurrency library):引入了一套并发编程的标准库,包括原子操作、条件变量等。

  13. 右值引用和移动语义:引入了右值引用和移动语义,提高了资源的转移效率和性能。

这只是C++11引入的一部分新特性,还有其他一些较小的改进和增强。C++11的引入使得C++语言更加现代化和强大,为开发者提供了更多的工具和功能来编写高效、安全和可维护的代码。


当然,请看以下举例:

  1. 自动类型推导(Auto):

auto x = 10; // 推导为int类型
auto name = "John"; // 推导为const char*类型
  1. 统一的初始化语法:

int arr[] = {1, 2, 3}; // 数组初始化
std::vector<int> vec = {4, 5, 6}; // 向量初始化
std::pair<int, std::string> p = {7, "Hello"}; // 对象初始化
  1. 范围-based for循环:

std::vector<int> vec = {1, 2, 3, 4, 5};
for (int num : vec) {
    std::cout << num << " ";
}
// 输出:1 2 3 4 5
  1. nullptr关键字:

void func(int* ptr) {
    if (ptr == nullptr) {
        std::cout << "Null pointer" << std::endl;
    } else {
        std::cout << "Non-null pointer" << std::endl;
    }
}
  1. 强类型枚举(Strongly-typed enums):

enum class Color { RED, GREEN, BLUE };
Color c = Color::RED;
  1. lambda表达式:

std::vector<int> vec = {1, 2, 3, 4, 5};
int sum = 0;
std::for_each(vec.begin(), vec.end(), [&sum](int num) {
    sum += num;
});
std::cout << "Sum: " << sum << std::endl; // 输出:Sum: 15
  1. 移动语义(Move semantics):

std::vector<int> source = {1, 2, 3, 4, 5};
std::vector<int> destination = std::move(source);
// 现在source为空,destination包含原来source的元素
  1. 多线程支持:

#include <iostream>
#include <thread>

void hello() {
    std::cout << "Hello from thread!" << std::endl;
}

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

这些示例只是C++11引入的新特性中的一部分,展示了其中的一些用法。C++11还有许多其他功能和改进,可供开发者使用。


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击