C++常用关键字、新特性以及std函数
pragma
作用是设定编译器的状态或者是指示编译器完成一些特定的动作
#pragma once
只要在头文件的最开始加入这条指令就能够保证头文件被编译一次
gflags
- DEFINE_STRING(name, default value, “explaination”)
- DECLARE_STRING
constexpr
- https://www.codenong.com/cs109806752/
- const 和 constexpr 的区别
- const 只读,constexpr 指的是变量
- 在 C++11 以后,建议凡是 「常量」 语义的场景都使用 constexpr,只对 「只读」 语义使用 const。
enum class 强类型枚举
- 枚举类型时安全的,枚举值也不会被隐式转换为整数,无法和整数数值比较
noexcept
- 关键字告诉编译器,函数中不会发生异常,这有利于编译器对程序做更多的优化
- https://www.cnblogs.com/sword03/p/10020344.html
final
override
share_ptr 和 unique_ptr
std::atomic<>
- 原子类型是封装了一个值的类型,它的访问保证不会导致数据的竞争,并且可以用于在不同的线程之间同步内存访问
C++ lambda 表达式
- [capture list] (params list) mutable exception-> return type { function body }
- 值传递,引用传递,隐式捕获
- std::function<int(int)>
- 本质是一种类模板
- 通过std::function对C++中各种可调用实体(普通函数、Lambda表达式、函数指针、以及其它函数对象等)的封装,形成一个新的可调用的std::function对象;让我们不再纠结那么多的可调用实体。一切变的简单粗暴。
- 可变模板参数
- 通过std::placeholders传递的参数是通过引用传递的
- std::bind()
移动构造函数
reintepret_cast<int>
auto
override
unique_ptr<>
- 为动态申请的资源提供异常安全保证 (new 之后忘了delete或者由于异常的原因)
- 返回函数内动态申请资源的所有权
- 在容器中保存指针
- std::move()
- get()
- release()
- reset()
shared_ptr<>
C++ 中的 RAII 机制(Resource Acquisition Is Initialization)
-
涉及到 多线程 以及 互斥锁
-
#include <pthread.h>
std::variant<int, long, std::string, bool>
- 类似union
- std:get<>()
- std::visit(函数对象,class... Variants)
std::make_pair()
decltype
可变模板参数
std::transform
- https://www.cnblogs.com/MrLiuZF/p/13338848.html
- std::transform的主要作用应该就是省去了我们自己写for循环实现。
std::minmax_element
std::for_each
std::tie
- 返回tuple的左值引用,即返回类型是 std::tuple<Types& ...>,这里“...” 代表可变模板参数。
- 或者也可以用于解偶(unpack)一个 pair 对象,例如:
#include <iostream> #include <string> #include <set> #include <tuple> struct S { int n; std::string s; float d; bool operator<(const S& rhs) const { // compares n to rhs.n, // then s to rhs.s, // then d to rhs.d return std::tie(n, s, d) < std::tie(rhs.n, rhs.s, rhs.d); } }; int main() { std::set<S> set_of_s; // S is LessThanComparable S value{42, "Test", 3.14}; std::set<S>::iterator iter; bool inserted; // unpacks the return value of insert into iter and inserted std::tie(iter, inserted) = set_of_s.insert(value); // set 的 insert 函数 返回的是一个 pair 对象,即 pair<iterator, bool>. if (inserted) std::cout << "Value was inserted successfully\n"; }
std::make_pair
四种 cast ( static_cast, const_cast, reinterpret_cast, dynamic_cast)
四种智能指针 ( auto_ptr<>, unique_ptr<>, shared_ptr<>, weak_ptr<>)
std::forward
std::move 移动语义
右值引用
emplace_back 和 push_back
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架