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

final

override

share_ptr unique_ptr

std::atomic<>

  • 原子类型是封装了一个值的类型,它的访问保证不会导致数据的竞争,并且可以用于在不同的线程之间同步内存访问 

C++ lambda 表达式

  • [capture list] (params list) mutable exception-> return type { function body }
  • 值传递,引用传递,隐式捕获
  • std::function<int(int)>
  1. 本质是一种类模板
  2. 通过std::function对C++中各种可调用实体(普通函数、Lambda表达式、函数指针、以及其它函数对象等)的封装,形成一个新的可调用的std::function对象;让我们不再纠结那么多的可调用实体。一切变的简单粗暴。
  3. 可变模板参数
  • 通过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

posted @   算是一个初学者  阅读(464)  评论(0编辑  收藏  举报
编辑推荐:
· 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 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示