C++ 11
C++ 11
zzhongcy
因为站在了巨人的肩上,所以我看得更远。
当你发现自己的才华撑不起野心时,就请安静下来学习吧
展开
-
C++11:constexpr详解,以及与const对比
本文根据众多互联网博客内容整理后形成,引用内容的版权归原始作者所有,仅限于学习研究使用。 C++11为了提高代码执行效率做了一些改善。这种改善之一就是: 生成常量表达式,允许程序利用编译时的计算能力。假如你熟悉模板元编程,你将发现constexpr使这一切变得更加简单。constexpr使我们很容易利用上编译时编程的优势。 常量表达式主要是允许一些计算发生在编译时,即发生在代码编译而不是运行的时候。这是很大的优化:假如有些事情可以在编译时做,它将只做一次,而不是每次程序运行时。需...原创 2020-09-01 15:10:57 · 2097 阅读 · 0 评论 -
C++11:lambda表达式的陷阱
1、对于lambda表达式,避免使用默认捕获模式1.1 对于lambda表达式,避免使用默认捕获模式个人看法 英文原著中使用的是“avoid default capture modes”,所以我在文中翻译为“避免使用默认捕获模式”,但是我认为把“默认捕获模式”称为“隐式捕获模式”更好,因为作者所指的“默认捕获模式”是指在捕获语句中只出现等号或者引用符号(即“[=]”或“[&a...原创 2019-02-28 11:36:49 · 3270 阅读 · 0 评论 -
C++11:std::transform的使用
std::transform在指定的范围内应用于给定的操作,并将结果存储在指定的另一个范围内。要使用std::transform函数需要包含<algorithm>头文件。以下是std::transform的两个声明,一个是对应于一元操作,一个是对应于二元操作:template <class InputIterator, class OutputIterator, ...转载 2018-12-18 16:45:35 · 2522 阅读 · 0 评论 -
c++11:函数内部返回对象使用move语义
一句话,直接返回即可,一般不用任何特殊写法。 当启动了c++11选项后,通过函数返回代码没有发生任何变化,但是已经使用了move语义,而不一定使用之前介绍的NRVO编译器优化技术。注意,右值引用rvalue reference是表达式计算完成后就不再存在的临时变量,左值是表达式计算完成后的变量。如果能够用&求址的,就是左值。下面是stackoverflow上的一个讨论...原创 2019-01-30 15:18:13 · 3158 阅读 · 0 评论 -
C++11:新特性概要分享
https://segmentfault.com/a/11900000157509422011年c++11标准通过比c++98标准通过,晚了11年多,140个新特性,约600个缺陷的修正。1990年,The Annotated C++ Reference Manual,描述了c++核心机制,没有涉及库。1998年,C++98标准提出,包括STL、locale、iostream、nu...转载 2019-01-30 13:22:41 · 561 阅读 · 0 评论 -
c++11:tuple元组详解
c++11中的tuple(元组)。tuple看似简单,其实它是简约而不简单,可以说它是c++11中一个既简单又复杂的东东,关于它简单的一面是它很容易使用,复杂的一面是它内部隐藏了太多细节,要揭开它神秘的面纱时又比较困难。 tuple是一个固定大小的不同类型值的集合,是泛化的std::pair。和c#中的tuple类似,但是比c#中的tuple强大得多。我们也可以把他当做一个通用...转载 2019-02-02 15:53:29 · 6958 阅读 · 0 评论 -
C++11:右值引用、move, 以及使用emplace_back代替push_back
最近在写一段代码的时候,突然很好奇C++11中对push_back有没有什么改进以增加效率,上网搜了一些资料,发现果然新增了emplace_back方法,比push_back的效率要高很多。1、右值引用C++11引入了右值引用,用&&表示右值引用,如int &&a = add(1,2)。先了解下什么是左值和右值,简单的说,下面的表达式:...原创 2019-02-02 10:33:57 · 9749 阅读 · 7 评论 -
C++11: yield() vs sleep_for()
在写入Microsoft专用C++代码时,spinlocking时使用Sleep(1)比Sleep(0)好,是因为Sleep(0)将使用更多的CPU时间,而且Sleep(0)只有在有另外一个等于-priority线程等待运行。 然而,使用C++ 11线程库,没有太多关于std :: this_thread :: yield()与std :: this_thread ...翻译 2019-04-28 17:05:24 · 3462 阅读 · 0 评论 -
c++11:线程池,boost threadpool、thread_group example
这里介绍一下boost两种线程池的使用,以及C++11实现线程池。1 boost::threadpool最新版本boostHeader:boost/asio/thread_pool.hppConvenience header:boost/asio.hppvoid my_task(){ ...}...// Launch the pool with four...原创 2019-04-22 17:00:49 · 14890 阅读 · 0 评论 -
C++11:带来的随机数生成器
C++11带来诸多特性,random就是其一.1. random_device 标准库提供了一个非确定性随机数生成设备.在Linux的实现中,是读取/dev/urandom设备;Windows的实现居然是用rand_s,在这里强烈谴责一下. random_device提供()操作符,用来返回一个min()到max()之间的一个数字.如果是Linux(Unix Like或者Unix)...转载 2019-02-01 09:51:23 · 1595 阅读 · 0 评论 -
C++11: 并发指南五(std::condition_variable 详解)
<condition_variable > 头文件主要包含了与条件变量相关的类和函数。相关的类包括 std::condition_variable 和 std::condition_variable_any,还有枚举类型std::cv_status。另外还包括函数 std::notify_all_at_thread_exit(),下面分别介绍一下以上几种类型。std::co...转载 2018-12-25 15:38:39 · 13270 阅读 · 3 评论 -
C++11: 并发指南系列
本系列文章主要介绍 C++11 并发编程,计划分为 9 章介绍 C++11 的并发和多线程编程,分别如下:C++11 并发指南一(C++11 多线程初探)(本章计划 1-2 篇,已完成 1 篇)C++11 并发指南二(std::thread 详解)(本章计划 1-2 篇,已完成 1 篇)C++11 并发指南三(std::mutex 详解)(本章计划 1-2 篇,已完成 2 篇)C+...转载 2018-12-25 15:12:01 · 1314 阅读 · 0 评论 -
C++11:实现线程安全的单例模式(使用std::call_once)
注意:在C++11前,static变量的初始化,并不是线程安全的(C++11是安全的,在c++11中,static静态类对象在执行构造函数进行初始化的过程是线程安全的)。https://blog.csdn.net/yuhaiyang457288/article/details/504200731. 饿汉模式使用饿汉模式实现单例是十分简单的,并且有效避免了线程安全问题,因为将该单例对象定义...转载 2018-12-24 13:41:27 · 1385 阅读 · 0 评论 -
C++11:once_flag,call_once实现分析
本文的分析基于llvm的libc++,而不是gun的libstdc++,因为libstdc++的代码里太多宏了,看起来蛋疼。在多线程编程中,有一个常见的情景是某个任务只需要执行一次。在C++11中提供了很方便的辅助类once_flag,call_once。声明首先来看一下once_flag和call_once的声明:struct once_flag{ constexpr...转载 2018-12-24 13:30:05 · 1297 阅读 · 0 评论 -
c++ 11: lock_guard/unique_lock详解
概述头文件介绍Mutex 系列类(四种)std::mutex,最基本的 Mutex 类。std::recursive_mutex,递归 Mutex 类。std::timed_mutex,定时 Mutex 类。std::recursive_timed_mutex,定时递归 Mutex 类。Lock 类(两种)std::lock_guard,与 Mutex RAII 相关...原创 2018-12-24 11:12:13 · 9991 阅读 · 4 评论 -
C++ 11: 不可拷贝(noncopyable)类,以及boost::noncopyable介绍
拷贝拷贝是任何一门编程语言都必不可少的操作。在 C++ 里,拷贝有等号拷贝和构造拷贝之分:Foo foo, foo2;Foo foo2 = foo; // 等号拷贝Foo foo3(foo); // 构造拷贝 等号拷贝是显式的,总得有个等号=在那才行。构造拷贝是隐式的,除了上面示例代码里那种直接写出构造函数的情况,在使用以值传递作为参数和以值返回的函数时,都...转载 2018-12-21 17:11:31 · 4585 阅读 · 0 评论 -
C++11中std::move的使用
右值引用分清楚什么是左值和右值,一个比较简易的方法就是能否取地址,能取地址的则为左值。为什么引入右值机制?主要是为了效率。右值一般为临时变量,字面常量也属于右值,因为临时变量往往在后面不可使用或者说不再使用,因此,我们可以steal窃取他们的资源。移动构造在C++11中,标准库在<utility>中提供了一个有用的函数std::move,std::mov...原创 2018-12-21 15:58:46 · 4361 阅读 · 0 评论 -
C++ 11:std::auto_ptr介绍,以及boost::scoped_ptr
1 std::auto_ptr1.1 auto_ptr介绍 智能指针能保证,无论在何种情况下,只要自己被摧毁,就一定连带释放其所指资源。auto_ptr是这样的一种指针:它是“它所指向的对象”的拥有者。auto_ptr要求一个对象只能有一个拥有者,严禁一物二主。不再需要delete,也不再需要catch了。不用担心忘掉delete动作,担心程序异常结束时内存遗失或者资源遗失,只...转载 2019-06-24 16:51:30 · 888 阅读 · 0 评论 -
c++11: thread_local
thread_local变量是C++ 11新引入的一种存储类型。它会影响变量的存储周期(Storage duration),C++中有4种存储周期:automatic static dynamic thread有且只有thread_local关键字修饰的变量具有线程周期(thread duration),这些变量(或者说对象)在线程开始的时候被生成(allocated),在线程结束的时...转载 2019-06-10 13:47:49 · 20127 阅读 · 0 评论 -
C++11:再谈shared_ptr,以及shared_ptr参数传递以及构造细节
shared_ptr在boost库中已经有多年了,C++11又为其正名,把他引入了STL库,放到了std的下面,可见其颇有用武之地;但是shared_ptr是万能的吗?有没有什么样的问题呢?本文并不说明shared_ptr的设计原理,也不是为了说明如何使用,只说一下在使用过程中的几点注意事项。参数值传递代码如下:#include <iostream>#inclu...转载 2019-05-23 13:13:02 · 26609 阅读 · 5 评论 -
C++11 find和find_if的用法
回顾学习find和find_if, 网上查了一下资料,这里记录一下。 STL的find,find_if函数提供了一种对数组、STL容器进行查找的方法。使用该函数,需 #include <algorithm>我们查找一个list中的数据,通常用find(),例如:1、findusing namespace std;int main(){ ...原创 2019-02-19 15:09:35 · 52899 阅读 · 6 评论