C++ 11有哪些新特性
C++11是C++编程语言的第11个标准,引入了许多新特性和改进。以下是C++11的一些主要特性:
自动类型推导(Auto):引入了auto关键字,可以自动推导变量的类型。
统一的初始化语法:允许使用列表初始化(initializer list)语法来初始化变量和对象。
范围-based for循环:引入了基于范围的for循环,用于遍历容器中的元素。
nullptr关键字:引入了nullptr关键字,用于表示空指针。
强类型枚举(Strongly-typed enums):枚举类型支持了作用域限定、前置声明以及底层类型的指定。
lambda表达式:引入了lambda表达式,允许在代码中定义匿名函数。
移动语义(Move semantics):通过引入右值引用(rvalue reference)和移动构造函数(move constructor)来实现资源的高效转移。
多线程支持:引入了对多线程编程的原生支持,包括线程、互斥量、条件变量等。
智能指针(Smart pointers):引入了shared_ptr和unique_ptr等智能指针,用于管理动态分配的内存,避免内存泄漏。
类型推导模板(Template type inference):在模板函数的调用中,允许省略模板参数。
正则表达式支持:引入了正则表达式库,提供了对正则表达式的解析和匹配功能。
并发编程库(Concurrency library):引入了一套并发编程的标准库,包括原子操作、条件变量等。
右值引用和移动语义:引入了右值引用和移动语义,提高了资源的转移效率和性能。
这只是C++11引入的一部分新特性,还有其他一些较小的改进和增强。C++11的引入使得C++语言更加现代化和强大,为开发者提供了更多的工具和功能来编写高效、安全和可维护的代码。
当然,请看以下举例:
自动类型推导(Auto):
auto x = 10; // 推导为int类型 auto name = "John"; // 推导为const char*类型
统一的初始化语法:
int arr[] = {1, 2, 3}; // 数组初始化
std::vector<int> vec = {4, 5, 6}; // 向量初始化
std::pair<int, std::string> p = {7, "Hello"}; // 对象初始化范围-based for循环:
std::vector<int> vec = {1, 2, 3, 4, 5};
for (int num : vec) {
std::cout << num << " ";
}
// 输出:1 2 3 4 5nullptr关键字:
void func(int* ptr) {
if (ptr == nullptr) {
std::cout << "Null pointer" << std::endl;
} else {
std::cout << "Non-null pointer" << std::endl;
}
}强类型枚举(Strongly-typed enums):
enum class Color { RED, GREEN, BLUE };
Color c = Color::RED;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移动语义(Move semantics):
std::vector<int> source = {1, 2, 3, 4, 5};
std::vector<int> destination = std::move(source);
// 现在source为空,destination包含原来source的元素多线程支持:
#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还有许多其他功能和改进,可供开发者使用。

- 上一篇:C++标准库vector以及迭代器
- 下一篇:C++中vector和list的区别
