![](https://img-blog.csdnimg.cn/20210415201905876.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++11
文章平均质量分 74
C++11相关知识
xupeng1644
道阻且长,行则将至!
展开
-
Linux下编译MySQL++及简单使用
MySQL++的官网地址为,当前推荐的版本为以下载版本为例,下载地址为。原创 2022-08-12 15:40:54 · 816 阅读 · 0 评论 -
_GLIBCXX_USE_CXX11_ABI有什么作用(转载)
最近遇到个问题,在链接OpenVINO的时候,需要将libinference_engine.so与libinference_engine_legacy.so都链接进去,但如果在CMakeLists里设置add_definitions(-D _GLIBCXX_USE_CXX11_ABI=0),就无法正常链接:编译器只会链接libinference_engine_legacy.so,而没有libinference_engine.so,当设置add_definitions(-D _GLIBCXX_USE_CXX1转载 2022-01-27 10:03:19 · 550 阅读 · 0 评论 -
C++11 线程对象创建后既不join()也不detach()的后果
C++11中,线程对象(std::thread)创建后,有两种状态:joinablenonjoinable那么分别在什么情况下位于上面两种状态呢?线程对象通过默认构造函数构造时线程状态为nonjoinable;线程对象通过有参构造函数创建时状态为joinable。joinable状态的线程被调用join()或者detach()会变成nonjoinable状态。线程对象析构时,会判断线程的状态。如果线程处于nonjoinable状态时,会调用**terminate()**函数直接令程序退出。原创 2021-07-07 16:06:45 · 3187 阅读 · 4 评论 -
C++11 static_assert(转载)
版权声明:本文为CSDN博主「啊啊啊西吧」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/drdairen/article/details/76689014static_assert()简介c++0x引入了static_assert关键字,用来实现编译期间的断言,叫静态断言。语法:static_assert(常量表达式,要提示的字符串);如果第一个参数常量表达式的值为false,会产生一条编译错误,错误位.转载 2021-07-07 12:48:07 · 198 阅读 · 0 评论 -
如何理解互斥锁、条件锁、读写锁以及自旋锁?(转载)
自旋锁(spinlock)很好理解。对自旋锁加锁的操作,你可以认为是类似这样的:while (抢锁(lock) == 没抢到) {}只要没有锁上,就不断重试。显然,如果别的线程长期持有该锁,那么你这个线程就一直在 while while while 地检查是否能够加锁,浪费 CPU 做无用功。仔细想想,其实没有必要一直去尝试加锁,因为只要锁的持有状态没有改变,加锁操作就肯定是失败的。所以,抢锁失败后只要锁的持有状态一直没有改变,那就让出 CPU 给别的线程先执行好了。这就是互斥器(mutex)也就是转载 2021-06-01 16:27:08 · 1331 阅读 · 0 评论 -
std::thread参数传递包含引用时的注意事项
代码片段如下:...void TestFunc(int& data){ ...}int data = 0;std::thread oneThread(testFunc, data); // 方式1 errorstd::thread oneThread(TestFunc, std::ref(data)); // 方式2 ok...当构造std::thread时需要传递引用对象时,直接使用使用方式1会编译报错,应该使用方式2通过std::ref()的包装来达到传递引用的目的。原创 2020-12-23 14:33:57 · 1940 阅读 · 0 评论 -
C++11 atomic_flag总结
// atomic_flag as a spinning lock#include <iostream> // std::cout#include <atomic> // std::atomic_flag#include <thread> // std::thread#include <vector> // std::vector#include <sstream>原创 2020-05-22 19:27:36 · 1713 阅读 · 0 评论 -
无锁同步-C++11之Atomic和CAS
概要本文是无锁同步系列文章的第一篇,主要探讨C++11中的Atomic。我们知道在C++11中引入了mutex和方便优雅的lock_guard。但是有时候我们想要的是性能更高的无锁实现,下面我们来讨论C++11中新增的原子操作类Atomic,我们可以利用它巧妙地实现无锁同步。传统的线程同步#include <thread>#include <mutex>#include <iostream>using namespace std;mutex g_mu转载 2020-05-22 11:17:54 · 1805 阅读 · 0 评论 -
C++ 自旋锁简单实现
C++11 版不带自旋锁的API,我们可以手动实现,有的时候线程执行的功能比较简单,或者说代码量较少,如果使用mutex的话,开销比较大,但是使用mutex的锁,线程处于非运行态时不占用CPU,这是其他的线程可以运行,使用自旋锁时线程被阻塞,但是被阻塞线程依然不会让出CPU,而是会不断的while来检查锁的状态,有点浪费CPU,所以自旋锁一般适用于简短的不耗时的线程 自旋锁可以使用如下方式来实现:class spin_lock {private: atomic_flag flag;publi转载 2020-05-22 08:33:57 · 2461 阅读 · 1 评论 -
std::condition_variable notify_one()与notify_all()的区别
notify_one()与notify_all()常用来唤醒阻塞的线程,线程被唤醒后立即尝试获得锁。notify_one()因为只唤醒一个线程,所以能够立即获得锁。其余的线程不会被唤醒,需要等待再次调用notify_one()或者notify_all()。notify_all()会唤醒所有阻塞的线程,其中只有一个线程能够获得锁。那其余未获取锁得线程接着会怎么样?会阻塞?还是继续尝试获得锁?答案是会继续尝试获得锁(类似于轮询),而不会阻塞。当持有锁的线程释放锁时,这些线程中的一个会获得锁。而其余的会接着尝原创 2020-05-09 12:20:28 · 6255 阅读 · 7 评论 -
C++11 std::ref()
std::bind 总是拷贝其参数,但是,调用者可以使用std::ref来实现传递引用给std::bind,翻译自《Effective Modern C++:改善C++11和C++14的42个具体做法》。原文如下:std::bind always copies its arguments, but callers can achieve the effect of having an arg...转载 2020-04-03 12:46:58 · 1876 阅读 · 0 评论 -
C++11 enable_shared_from_this
enable_shared_from_this是一个模板类,定义于头文件,其原型为:template< class T > class enable_shared_from_this;std::enable_shared_from_this 能让一个对象(假设其名为 t ,且已被一个 std::shared_ptr 对象 pt 管理)安全地生成其他额外的 std::shared_p...转载 2020-03-20 21:42:35 · 1292 阅读 · 0 评论 -
C++11 random库
c++ 中的随机数在 C++ 程序中,在新标准出现之前,C 和 C++ 都依赖一个简单的 C 库函数 rand 来生成随机数,但是,这个函数生成的是均匀分布的伪随机数,每个随机数的范围在 0 和一个系统相关的最大值(至少为 32767)之间。rand 函数有一些问题:即使不是大多数,也有很多程序需要不通范围的随机数。一些应用需要随机浮点数。一些程序需要非均匀分布的随机数。而在编写程序为了解决这...转载 2020-03-11 11:23:15 · 3555 阅读 · 1 评论 -
C++11 regex库
1. 介绍正则表达式(Regular Expression,常简写为regex、regexp或RE)。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。C++11开始支持正则表达式。正则表达式非常强大,具体的实现算法有差异,所以会有多种实现方式。C++11支持6种正则表达式引擎。ECMAScript 是其中支持最多元素的引擎,也是regex默认支持的引擎。ECMAScript...转载 2020-03-10 12:04:52 · 1947 阅读 · 0 评论 -
C++11 chrono库
chrono库主要包含了三种类型:时间间隔Duration、时间点Time point和时钟Clocks。Duration:duration表示一段时间间隔,用来记录时间长度,可以表示几秒钟、几分钟或者几个小时的时间间隔,duration的原型是:template<class Rep, class Period = std::ratio<1>> class durat...转载 2020-03-10 11:07:33 · 1513 阅读 · 0 评论 -
C++11 thread_local
c++11 中添加了新的关键字thread_local,用来声明新的存储期(线程存储期变量),即线程局部变量。程序中的所有对象拥有下列存储期:1 自动存储期 对象的存储在外围代码块开始时分配,而在结束时解分配。除了声明为 static 、 extern 或 thread_local 的所有局部对象拥有此存储期。2 静态存储期对象的存储在程序开始时分配,而在程序结束时解分配。只存在对象的一个...转载 2020-03-02 13:38:30 · 1752 阅读 · 0 评论 -
C++11 继承构造函数与委托构造函数
一、继承构造函数如果基类的构造函数很多,那么子类的构造函数想要实现同样多的构造接口必须一一调用基类的构造函数,于是C++11 引入继承构造函数。class _A{public: _A(int _InInt) { ; } _A(double _InDouble, int _InInt) { ; } _A(float _InFloat, int _InInt, const char* _...转载 2020-02-29 17:36:43 · 1516 阅读 · 0 评论 -
C++11 emplace操作
emplace操作是C++11新特性,新引入的的三个成员emlace_front、empace 和 emplace_back,这些操作构造而不是拷贝元素到容器中,而是在特定位置进行构造。这些操作分别对应push_front、insert 和push_back,允许我们将元素放在容器头部、一个指定的位置和容器尾部。两者的区别当调用insert时,我们将元素类型的对象传递给insert,元素的对...转载 2020-02-29 11:21:27 · 1940 阅读 · 0 评论 -
C++11 decltype
有下面这个情况:template <class T1, class T2>void ft (T1 &x, T2 &y){ ... ?type? xpy = x+; ... }在这种情况下xpy应该是什么类型呢?由于不知道ft()将如何使用,因此无法预知这一点。正确的类型可能是T1、T2或者其他类型。假如又出现了重载运算符,这会让问题更加的复杂。于是为...转载 2020-02-27 11:57:39 · 1349 阅读 · 0 评论 -
C++11 后置返回类型
C++11新标准增加的auto不仅可以自动推断变量类型,还能结合decltype来表示函数的返回值。这些新特性可以让我们写出更简洁、更现代的代码。在泛型编程中,可能需要通过参数的运算来得到返回值的类型。方法1(可行但繁琐)我们看一下下面这个例子:#include<iostream>using namespace std;template <typename R,ty...转载 2020-02-27 11:15:43 · 2660 阅读 · 0 评论 -
C++11 非成员函数begin()、end()
非成员的begin()、end()可以应用在数组中,使得对数组的处理可以像其他STL容器一样。#include <iostream>#include <algorithm>int main(){ int datas[] = { 1, 2, 3, 4, 5 }; // 原来便利数组方式,通过sizeof(datas)/sizeof(datas[0])获得数组...原创 2020-02-26 11:10:04 · 1948 阅读 · 1 评论 -
C++11 关键字default和delete
1、 =default 和=delete 概述任何事物的出现都必然有着其出现的理由,伴随着每一个新的概念产生都会带来一系列的便利和价值。C++在不断的演变与发展,与此同时,伴随着许多新的特性和功能产生。=default、=delete 是C++11的新特性,分别为:显式缺省(告知编译器生成函数默认的缺省版本)和显式删除(告知编译器不生成函数默认的缺省版本)。C++11中引进这两种新特性的目的是为...转载 2020-02-24 15:16:59 · 2068 阅读 · 0 评论 -
C++11 关键字override和final
C++11之前,一直没有继承控制关键字。禁用一个类的进一步衍生是可能的但也很棘手。为避免用户在派生类中重载一个虚函数,你不得不向后考虑。C++ 11添加了两个继承控制关键字:override和final。override确保在派生类中声明的重载函数跟基类的虚函数有相同的签名。final阻止类的进一步派生和虚函数的进一步重载。final关键字一个派生类可以重载在基类中声明的成员函数,这是面...转载 2020-02-24 14:08:15 · 1879 阅读 · 5 评论 -
C++11 多线程
C++11提供了对原子性和多线程的支持。主要包含以下五个头文件:<thread>, <mutex>, <condition_variable>, <future>和<atomic>。<thread>:生成单个可执行线程,可以在多线程环境...转载 2020-02-16 23:36:29 · 1518 阅读 · 0 评论 -
C++11 智能指针
本文内容源自 C++11 智能指针原作者:Babu_Abdulsalam 本文翻译自 CodeProject,转载请注明出处。引入Ooops. 尽管有另外一篇文章说 C++11 里的智能指针了。近来,我听到许多人谈论 C++ 新标准,就是所谓的 C++0x/C++11。 我研究了一下 C++11 的一些语言特性,发现确实它确实有一些巨大的改变。我将重点关注 C++11 的智能指针部分。...转载 2020-02-16 16:21:08 · 1551 阅读 · 0 评论 -
C++11 右值引用与移动语义
移动语义有一些类的资源是__不可共享__的,这种类型的对象可以被移动但不能被拷贝,如:IO 或 unique_ptr库容器、string 和 shared_ptr 支持拷贝和移动,IO 和 unique_ptr 则只能移动不能拷贝。。右值引用右值引用是必须绑定到右值的引用,右值引用使用 && 符号,相较于左值引用的& 。右值引用有一个特性就是其只能绑定到即将销毁的对...转载 2020-02-16 11:57:57 · 1584 阅读 · 0 评论 -
C++11 std::bind
先来看看std::bind1st和std::bind2ndbind是这样一种机制,它可以预先把指定可调用实体的某些参数绑定到已有的变量,产生一个新的可调 用实体,这种机制在回调函数的使用过程中也颇为有用。C++98中,有两个函数bind1st和bind2nd,它们分别可以用来绑定functor的第 一个和第二个参数,它们都是只可以绑定一个参数。各种限制,使得bind1st和bind2nd的可用性...转载 2020-02-16 00:24:20 · 1370 阅读 · 0 评论 -
C++11 std::function类模板
概述类模版std::function是一种通用、多态的函数封装。std::function的实例可以对任何可以调用的目标实体进行存储、复制、和调用操作,这些目标实体包括普通函数、Lambda表达式、函数指针、以及其它函数对象等。std::function对象是对C++中现有的可调用实体的一种类型安全的包裹(我们知道像函数指针这类可调用实体,是类型不安全的)。通常std::function是一个...转载 2020-02-15 23:17:16 · 1876 阅读 · 0 评论 -
C++11 Lambda表达式
Lambda表达式匿名函数有函数体,但没有函数名。匿名函数是很多高级语言都支持的概念,如lisp语言在1958年首先采用匿名函数。正因为如此,C++11也同样引入了lambda函数。在C++11中,你可以在源码中内联一个lambda函数,这就使得创建快速的、一次性的函数变得简单了。相同类似功能我们也可以使用函数对象或者函数指针实现:函数对象能维护状态,但语法开销大,而函数指针语法开销...转载 2020-02-15 21:05:30 · 1535 阅读 · 0 评论 -
C++11 列表初始化
C++11之前主要有以下几种初始化方式://小括号初始化string str("hello"); //等号初始化string str="hello"; //POD对象与POD数组列表初始化struct Studnet{ char* name; int age;};Studnet s={"dablelv",18}; //纯数据(Plain of Data,PO...转载 2020-02-15 15:12:59 · 1772 阅读 · 0 评论 -
C++11基于范围的for循环
1 .基于范围的for循环在c++98中,若要访问一个数组中的数据元素,则需采用循环和下标的方式输出数组中的内容。如:#include<iostream>#include<algorithm>using namespace std;int main(int argc,char argv){ int arr[] = { 1, 2, 3, 4, 5, 6, 7,...转载 2020-02-15 15:00:44 · 1576 阅读 · 0 评论 -
C++11 auto类型推导
1. auto类型推导下面是auto的使用举例:auto x =5; //正确,x是int类型auto pi = new auto(1); //正确,批是int*const auto* v = &x, u = 6; //正确,v是const int类型,u是const intstatic auto y = 0.0; //正确,y是double类型auto int r; //错误...转载 2020-02-15 14:37:07 · 1407 阅读 · 0 评论 -
C++11nullptr
为什么要引入nullptr呢?任何事物的产生都有其缘由和意义,nullptr也不例外。一切还得从0开始说。C++98中的0即表示整数字面值0,又表示指针的0值:class Foo{public: void bar() {}};int *p = 0; // 0表示普通指针的0值void (Foo::*pBar)() = 0; // 0表示指向成员函数的指针的0值std:...转载 2020-02-15 14:11:57 · 1595 阅读 · 0 评论