c++11/14/17/20 新特性回顾整理
文章平均质量分 66
记录c++11/14/17/20 新特性
_李白_
内外兼修,方是正途;外是架构,内是数学。
展开
-
linux c++ 查找指定路径下的特定类型文件
linux c++ 查找指定路径下的特定类型文件原创 2022-09-07 17:27:19 · 938 阅读 · 0 评论 -
c++11:std::forward,完美转发
目录1、不完美转发2、完美转发2.1、引用折叠2.2、std::forward1、不完美转发所谓完美转发,是指在函数模板中,完全按照模板的参数的类型,将参数传递给函数模板中调用的另一个函数。比如:template <typename T>void IamForwording(T t){ IrunCodeActually(t);}上面的例子中,IamForwarding是一个转发函数模板。而函数IrunCodeActually则是真正执行代码的目原创 2022-05-15 18:26:38 · 4867 阅读 · 0 评论 -
c++11:std::move,移动语义
功能 将一个左值强制转化为右值引用。需要注意的是,被转化的左值,其生命周期并没有随着左右值得转化而改变(例如,std::move转化后的左值变量lvalue不能被立即析构)/*================================================================* Copyright (C) 2022 baichao All rights reserved.** 文件名称:moveable.cpp* 创 建 者:baichao*..原创 2022-05-14 21:08:55 · 366 阅读 · 0 评论 -
c++11:__func__,返回所在函数的名称
原创 2022-05-09 23:31:40 · 326 阅读 · 0 评论 -
c++11:std::set和std::unordered_set
1、std::set头文件:<set>set是根据特定顺序存储唯一元素的容器,key就是元素的值,而且类型为const,不可在容器中修改,只支持添加和删除。成员函数 (构造函数) 构造set (公开成员函数) (析构函数) 析构set (公开成员函数) operator= 赋值给容器 (公开成员函数) get_allocator 返回相关的分配器 (公开成..原创 2021-01-14 23:19:17 · 3998 阅读 · 0 评论 -
c++11:std::map与std::unordered_map(hash map)的区别
本质区别在于std::map底层使用红黑树,而std::unordered_map使用的是hash map。1、std::map头文件:<map>类声明:template< class Key, class T, class Compare = std::less<Key>, class Allocator = std::allocator<std::pair<const Key, T> >> c原创 2021-01-13 19:22:10 · 1959 阅读 · 0 评论 -
c++14:std::quoted
C++14引入std::quoted用于给字符串添加双引号/*================================================================* Copyright (C) 2021 baichao All rights reserved.** 文件名称:quoted.cpp* 创 建 者:baichao* 创建日期:2021年01月06日* 描 述:*=============================.原创 2021-01-06 19:11:05 · 3379 阅读 · 0 评论 -
c++11:std::is_same
头文件:<type_traits>定义:template< class T, class U >struct is_same;功能: 若 T 与 U 指名同一类型(考虑 const/volatile 限定),则提供等于 true 的成员常量 value 。否则 value 为 false 。满足交换律,即对于任何二个类型 T 与 U , 若有is_same<T, U>::value == true 必有 is_same<U, T&g...原创 2020-11-25 22:47:00 · 416 阅读 · 0 评论 -
c++11:智能指针之std::unique_ptr、std::shared_ptr、std::weak_ptr
头文件<memory>1、std::unique_ptr声明:template<class T,class Deleter = std::default_delete<T>> class unique_ptr; template <class T,class Deleter> class unique_ptr<T[], Deleter>; std::unique_ptr是通过指针占有并管理另一对象,并在unique_ptr离开作原创 2020-11-24 11:04:01 · 2339 阅读 · 2 评论 -
c++11:override
功能:指定一个虚函数覆盖另一个虚函数。struct A{ virtual void foo(); void bar();}; struct B : A{ void foo() const override; // 错误:B::foo 不覆盖 A::foo // (签名不匹配) void foo() override; // OK:B::foo 覆盖 A::foo void bar() ove原创 2020-11-19 18:46:46 · 170 阅读 · 0 评论 -
c++11:std::make_unique、std::make_unique_for_overwrite
头文件:<memory>template<class T, class... Args > unique_ptr<T> make_unique( Args&&... args ); (1) (C++14 起) (仅对非数组类型) template< class T > unique_ptr<T> make_unique( std::size_t size ); (2) (C++14 ...原创 2020-11-18 22:40:08 · 4974 阅读 · 0 评论 -
c++11:std::default_delete
头文件:<memory>声明:template< class T > struct default_delete; template< class T > struct default_delete<T[]>; std::default_delete 是不指定删除器时 std::unique_ptr 所用的默认删除策略。 default_delete 的特化在典型实现上为空类,并且用于空基类优化。非特化的 default_delete 用原创 2020-11-17 22:50:18 · 5667 阅读 · 0 评论 -
c++11:std::atomic<T>::fetch_add、std::atomic<T>::fetch_sub
头文件:<atomic>仅为atomic<Integral>(C++11)与atomic<Floating>(C++20)模板特化的成员:T fetch_add( T arg,std::memory_order order = std::memory_order_seq_cst ) noexcept; T fetch_add( T arg,std::memory_order order = std::memory_order_seq_cst ...原创 2020-11-11 00:00:10 · 2137 阅读 · 0 评论 -
c++11:std::atomic<T>::compare_exchange_weak, std::atomic<T>::compare_exchange_strong
头文件:<atomic>函数声明:boolcompare_exchange_weak(T&expected, T desired, std::memory_ordersuccess, std::memory_order failure)noexcept; 原子地比较*this和expected的值,而若它们逐位相等,则以d...原创 2020-11-10 22:03:59 · 660 阅读 · 0 评论 -
c++11:noexcept的不抛出异常的声明和判定,以及在移动构造、复制构造、析构函数中默认存在的用法剖析
noexcept运算符进行编译时检查,若表达式声明为不抛出任何异常则返回true。可用于函数模板的noexcept说明符中,以声明函数将对某些类型抛出异常,但不对其他类型抛出。语法noexcept(表达式):返回bool类型的纯右值。...原创 2020-11-09 22:31:26 · 861 阅读 · 0 评论 -
c++11:std::declval、decltype
1、decltype是类型推导#include <iostream> struct A { double x; };const A* a; decltype(a->x) y; // y 的类型是 double(其声明类型)decltype((a->x)) z = y; // z 的类型是 const double&(左值表达式) template<typename T, typename U>auto add(T t, U u) -原创 2020-11-08 22:14:28 · 1222 阅读 · 0 评论 -
c++11:std::boolalpha、std::noboolalpha
头文件:std::ios_base& boolalpha( std::ios_base& str );std::ios_base& noboolalpha( std::ios_base& str );分别表示启用/禁用流str中的boolalpha标志直接看一个直观的实例#include <sstream>#include <locale>#include <iostream>int main(){原创 2020-11-04 23:55:58 · 439 阅读 · 0 评论 -
c++11:std::atomic
std::atomic<T>::load定义T load( std::memory_order order = std::memory_order_seq_cst ) const noexcept; c++11起 T load( std::memory_order order = std::memory_order_seq_cst ) const volatile noexcept; 原子地加载,并返回原子变量当前的值,按照order...原创 2020-11-01 23:57:43 · 27856 阅读 · 1 评论 -
c++11:std::atomic_flag
std::atomic_flag 是原子布尔类型,但不同于 std::atomic , std::atomic_flag 不提供加载或存储操作。只提供test_and_set和clear方法。// 用于初始化 std::atomic_flag 以清除(置 false )状态的初始化器。这样就可以通过lock和unlock操作,像往常一样互斥地访问临界区了。头文件 #include原创 2020-11-01 22:13:09 · 2411 阅读 · 0 评论 -
c++11:std::memory_order(c++11 六种内存序)
这造成的原因是编译器和cpu实施了重排指令,导致读写顺序会发生变化,只要不存在依赖,代码中后面的指令可能会被放在前面,从而先执行它。memory fence保证的是可见性的顺序:“假如我看到了a的最新值,那么我一定也得看到b的最新值”。线程2在ready为true的时候会访问a,对线程1来说,如果按照正常的执行顺序,那么a先被初始化,然后在将ready赋为true。这样就保证了线程1和线程2的顺序性,比如线程2在看到flag==true时,能看到线程1 realse之前所有操作。我们先来看两个线程代码。原创 2020-10-28 23:30:10 · 8123 阅读 · 3 评论 -
容器库:std::list<T,Allocator>::splice
voidsplice(const_iterator pos, list&other); (1) voidsplice(const_iterator pos, list&&other); (1) (C++11 起) voidsplice(const_iterator pos, list&other, const_iterator it); (2) ...原创 2020-10-22 22:07:57 · 569 阅读 · 0 评论 -
c++11:std::advance
头文件:#include<iterator> template<classInputIt,classDistance> voidadvance(InputIt&it, Distance n); (C++17 前) template<classInputIt,classDistance> constexprvoidadvance(InputIt&it, Distan...原创 2020-10-22 21:16:19 · 479 阅读 · 0 评论 -
c++11:std::partition
头文件:<algorithm> (1) template<classBidirIt,classUnaryPredicate> BidirIt partition(BidirIt first, BidirIt last, UnaryPredicate p); (C++11 前) template<classForwardIt,classUnaryPredicate> Forwa...原创 2020-10-21 23:39:02 · 2403 阅读 · 0 评论 -
std::timed_mutex、std::recursive_timed_mutex
1、std::timed_mutexA timed mutex is a time lockable object that is designed to signal when critical sections of code need exclusive access, just like a regular mutex, but additionally supporting timed try-lock requests.As such, a timed_mutex has two add原创 2020-10-19 22:56:55 · 395 阅读 · 0 评论 -
c++11:std::chrono::time_point、time_t、std::localtime、std::gmtime、std::chrono::steady_clock
template<class Clock,class Duration = typename Clock::duration> class time_point;类模板 std::chrono::time_point 表示时间中的一个点。它被实现成如同存储一个 Duration 类型的自 Clock 的纪元起始开始的时间间隔的值。Clock 必须满足时钟 (Clock) 的要求或为 std::chrono::local_t (C++20 起)成员类型 定义 clock.原创 2020-10-13 21:56:45 · 4655 阅读 · 1 评论 -
c++11:std::chrono::system_clock
Clock classes provide access to the current time_point.Specifically, system_clock is a system-wide realtime clock.member types:member type definition notes rep A signed arithmetic type (or a class that emulates it) Used to store acount.原创 2020-10-12 19:40:06 · 5164 阅读 · 0 评论 -
c++11:std::chrono::duration
头文件:<chrono>类模板:template<class Rep,class Period = std::ratio<1>>class duration;类模板 std::chrono::duration 表示时间间隔。它由 Rep 类型的计次数和计次周期组成,其中计次周期是一个编译期有理数常量,表示从一个计次到下一个的秒数。存储于 duration 的数据仅有 Rep 类型的计次数。若 Rep 是浮点数,则 duration 能表示小数的计次原创 2020-10-11 22:28:12 · 3791 阅读 · 0 评论 -
c++11:std::ratio、std::ratio_add
目录1、std::ratio2、std::ratio_add1、std::ratio头文件:<ratio>类模板:template<std::intmax_t Num,std::intmax_t Denom = 1> class ratio;类模板 std::ratio 及相关的模板提供编译时有理数算术支持。此模板的每个实例化都准确表示任一确定有理数,只要分子 Num 与分母 Denom 能表示为 std::intmax_t 类型的编译时常量。另外,原创 2020-10-09 21:43:16 · 406 阅读 · 0 评论 -
c++11:std::shared_future
类模板 std::shared_future 提供访问异步操作结果的机制,类似 std::future ,除了允许多个线程等候同一共享状态。不同于仅可移动的 std::future (故只有一个实例能指代任何特定的异步结果),std::shared_future 可复制而且多个 shared_future 对象能指代同一共享状态。若每个线程通过其自身的 shared_future 对象副本访问,则从多个线程访问同一共享状态是安全的。shared_future 可用于同时向多个线程发信,类似 std.原创 2020-10-09 15:05:17 · 492 阅读 · 1 评论 -
c++11:std::packaged_task
template <class T> packaged_task; // undefinedtemplate <class Ret, class... Args> class packaged_task<Ret(Args...)>;A packaged_task wraps a callable element and allows its result to be retrieved asynchronously.It is similar to s.原创 2020-09-27 23:37:41 · 376 阅读 · 0 评论 -
c++11 std::future、std::future_status
目录1、std::future2、std::future_status1、std::futuretemplate <class T> future;template <class R&> future<R&>; // specialization : T is a reference type (R&)template <> future<void>; // speci..原创 2020-09-27 22:47:53 · 646 阅读 · 0 评论 -
c++11:std::promise
// promise example#include <iostream> // std::cout#include <functional> // std::ref#include <thread> // std::thread#include <future> // std::promise, std::futurevoid print_int (std::future<int&...原创 2020-09-27 20:21:14 · 490 阅读 · 0 评论 -
c++11:std::async、std::launch
1、std::asyncunspecified policy (1) template <class Fn, class... Args> future<typename result_of<Fn(Args...)>::type> async (Fn&& fn, Args&&... args); specific policy (2) template <class Fn,原创 2020-09-27 16:02:00 · 1637 阅读 · 0 评论 -
c++11:std::make_shared
template <class T, class... Args>shared_ptr<T> make_shared (Args&&... args);Allocates and constructs an object of type T passing args to its constructor, and returns an object of type shared_ptr<T> that owns and stores a point.原创 2020-09-23 20:31:34 · 3851 阅读 · 0 评论 -
c++11 std::condition_variable、condition_variable_any、notify_all、notify_one、wait、wait_for、wait_until
目录1、std::condition_variable2、std::condition_variable::notify_all、std::condition_variable::notify_one3、std::condition_variable::wait、std::condition_variable::wait_for、std::condition_variable::wait_until4、condition_variable_any1、std::condition_vari原创 2020-09-17 23:21:06 · 1789 阅读 · 0 评论 -
c++11 std::recursive_mutex
A recursive mutex is a lockable object, just like mutex, but allows the same thread to acquire multiple levels of ownership over the mutex object.This allows to lock (or try-lock) the mutex object from a thread that is already locking it, acquiring a new原创 2020-09-17 19:17:14 · 9784 阅读 · 1 评论 -
c++11 std::once_flag、std::call_once
目录1、std::once_flag2、std::call_once1、std::once_flagFlag argument type for call_onceObject of this type are used as arguments forcall_once.Using the same object on different calls tocall_oncein different threads causes a single execution if ca...原创 2020-09-14 23:50:31 · 1724 阅读 · 1 评论 -
c++11 std::defer_lock, std::try_to_lock, std::adopt_lock
std::adopt_lockValue used as possible argument to the constructor of unique_lock or lock_guard.unique_lock objects constructed with adopt_lock do not lock the mutex object on construction, assuming instead that it is already locked by the current thread原创 2020-09-07 21:55:50 · 2857 阅读 · 0 评论 -
c++11 std::lock,std::lock_guard,unique_lock
template <class Mutex1, class Mutex2, class... Mutexes>void lock (Mutex1& a, Mutex2& b, Mutexes&... cde);Lock multiple mutexesLocks all the objects passed as arguments, blocking the calling thread if necessary.The function locks t.原创 2020-09-07 18:00:12 · 795 阅读 · 0 评论 -
c++11 std::stack
LIFO stack Stacks are a type of container adaptor, specifically designed to operate in a LIFO context (last-in first-out), where elements are inserted and extracted only from one end of the container. stacks are implemented ascontainer adaptors, wh...原创 2020-09-01 18:47:32 · 225 阅读 · 0 评论