c++11新特性(总结中)
2023-12-13 17:33:01
c++11新特性,总结中
一、自动类型推导(auto)
原理:auto关键字可以根据变量的初始化表达式自动推导出变量的类型。
auto x = 10; // x的类型被推导为int
auto y = 3.14; // y的类型被推导为double
auto z = "Hello"; // z的类型被推导为const char*
二、Lambda表达式
原理:Lambda表达式是一种匿名函数,可以在需要函数对象的地方使用,提供了一种更加灵活的函数定义方式。
// Lambda表达式的基本语法:[捕获列表](参数列表) -> 返回类型 { 函数体 }
auto sum = [](int a, int b) -> int { return a + b; };
int result = sum(3, 4); // 调用Lambda表达式
三、右值引用(rvalue reference)
原理:右值引用是一种新的引用类型,用于支持移动语义和完美转发,提高代码的效率。
int x = 5;
int&& rref = 10; // 右值引用绑定到右值
int&& rref2 = std::move(x); // 使用std::move将左值转换为右值引用
四、初始化列表(initializer list)
原理:初始化列表可以用于初始化数组、容器等数据结构,提供了一种简洁的初始化方式。
std::vector<int> numbers = {1, 2, 3, 4, 5}; // 使用初始化列表初始化vector
int arr[] = {1, 2, 3, 4, 5}; // 使用初始化列表初始化数组
五、线程库(thread library)
原理:C++11引入了std::thread类和相关函数,用于创建和管理线程,实现并发编程。
#include <iostream>
#include <thread>
void printHello() {
std::cout << "Hello from thread!" << std::endl;
}
int main() {
std::thread t(printHello); // 创建一个新线程并执行printHello函数
t.join(); // 等待线程执行完毕
return 0;
}
六、智能指针(smart pointer)
原理:智能指针是一种包装原始指针的类模板,可以自动管理内存,避免内存泄漏和悬空指针等问题。
#include <memory>
std::shared_ptr<int> ptr = std::make_shared<int>(10); // 创建一个shared_ptr
std::unique_ptr<int> ptr2 = std::make_unique<int>(20); // 创建一个unique_ptr
七、新的容器和算法
C++11引入了一些新的容器和算法,如unordered_map、unordered_set、move、emplace等,提高了代码的效率和可读性。
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> scores;
scores["Alice"] = 90;
scores["Bob"] = 80;
scores["Charlie"] = 70;
for (const auto& pair : scores) {
std::cout << pair.first << ": " << pair.second << std::endl;
}
return 0;
}
八、constexpr函数
原理:constexpr函数是一种可以在编译期间求值的函数,用于定义常量表达式函数,提高代码的效率。
constexpr int factorial(int n) {
return (n <= 1) ? 1 : n * factorial(n - 1);
}
int main() {
constexpr int result = factorial(5); // 在编译期间求值
std::cout << "Factorial of 5: " << result << std::endl;
return 0;
}```
## 九、静态断言(static_assert)
原理:静态断言可以在编译期间检查代码的正确性,如果断言条件为假,则编译错误。
```cpp
template <typename T>
void process(T value) {
static_assert(std::is_integral<T>::value, "T must an be integral type");
// ...
}
int main() {
process(10); // 正常调用
process(3.14); // 静态断言失败,编译错误
return 0;
}
文章来源:https://blog.csdn.net/weixin_47343978/article/details/134895423
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!