C++11的一般概念——The C++ standard library, 2nd Edition 笔记(二)
( 原书第四章,General Concepts)
只介绍新内容,关于头文件格式和后缀等C++03已经规范化的内容,不再赘述。
- namespace std:新的std子空间包括:
- std::tr1, tr1 = technical report 1;
- std::rel_ops, 用==和<运算实现所有比较运算的operator定义;
- std::chrono, 精度无关的时间库chrono的名字空间;
- std::placeholders, bind模板的占位符名字空间;
- std::regex_constants, 指定regex类型和特性的常数的名字空间;
- std::this_thread, 提供特定线程信息的全局线程函数的名字空间;
- 错误和异常处理:string的错误处理非常细致,而stl和valarry更倾向于时间优化,所以基本不检查逻辑错误。
- 可调用对象(Callable Objects):通过某种方式可以调用某种功能的对象,包括函数,(成员)函数指针,函数对象和lambda。
void func(int x, int y);
auto l = [](int x, int y){...};
class C {
public:
void operator()(int x, int y);
void memfunc(int x, int y);
} int main()
{
C c;
std::shared_ptr<C> sp(new C);
std::bind(func, , )(); // 注意(); func(3, 7)
std::bind(C(), , )(); // C()(3, 7);
std::bind(l, , )(); //l(3, 7);
std::bind(&C::memfunc, c, , )(); // c.memfunc(3, 7);
std::bind(&C::memfunc, sp, , )(); // sp->memfunc(3, 7); //async 表示后台线程执行
std::async(func, , ); // 注意(); func(3, 7)
std::async(c, , ); // c.operator()(3, 7);
std::async(l, , ); //l(3, 7);
std::async(&C::memfunc, &c, , )(); // c.memfunc(3, 7);
std::async(&C::memfunc, sp, , )(); // sp->memfunc(3, 7);
}
- 并发和多线程:C++11在语言层面和标准库上,对并发编程都提供了很好的支持。下列前两点为核心语言层的支持。
- 新的内存模型,独立更新两个不同线程中的不同对象是互相独立的。奇怪了,独立对象在不同的线程中怎么可能会有访问冲突?详情请看这里。
- thread_local关键字的引入,就是线程局部存储,Windows中的TLS系列函数或者Linux下的pthread_key_t;
- 与线程安全性相关的一些保证;
- 多个线程共享一个库对象,并且至少一个线程要修改它,可能会导致未定义行为;
- 一个线程正在构造对象,而另一个对象已经开始使用它,或者一个线程还在使用对象,而另一个线程已经开始析构它了,都会导致未定义行为。
- STL容器和容器适配器提供两点保证:1, 只读的并发访问是安全的; 2, 对于同一容器中的不同元素进行访问是安全的,vector<bool>除外(因为它是通过代理对象实现的。)
- 与stdio同步的标准流的并发访问是安全的。但是,stringstream, file stream或者stream buffer, 并发访问的行为未定义。
- atexit()和at_quick_exit()的并发调用会被同步。new,terminate或者unexpected的handler也会被同步。getenv()也是同步的。
- 支持并发函数库和类库(线程启动和同步,第18章介绍);
- allocator的简要介绍:它是某种特定内存解决方案的基础,比如共享内存,垃圾回收和面向对象数据库。关于默认的allocator,可参考《C++标准程序库》chapter 15.
C++11的一般概念——The C++ standard library, 2nd Edition 笔记(二)的更多相关文章
- C++11新特性——The C++ standard library, 2nd Edition 笔记(一)
前言 这是我阅读<The C++ standard library, 2nd Edition>所做读书笔记的第一篇.这个系列基本上会以一章一篇的节奏来写,少数以C++03为主的章节会和其它 ...
- C++学习书籍推荐《The C++ Standard Library 2nd》下载
百度云及其他网盘下载地址:点我 编辑推荐 经典C++教程十年新版再现,众多C++高手和读者好评如潮 畅销全球.经久不衰的C++ STL鸿篇巨著 C++程序员案头必 备的STL参考手册 全面涵盖C++1 ...
- C++ Standard Library
C++ Standard Library *注:内容主要是对參考1的学习记录.知识点与图片大都来源于该书, 部分知识点与图片来源于參考2. 详细參考信息,见最下方參考. * C++98中新支持的语言特 ...
- [译]The Python Tutorial#11. Brief Tour of the Standard Library — Part II
[译]The Python Tutorial#Brief Tour of the Standard Library - Part II 第二部分介绍更多满足专业编程需求的高级模块,这些模块在小型脚本中 ...
- 【概念的辨异】—— ISO C 与 POSIX C(C standard library 与 C POSIX library)
ISO C 表示 C Standard Library,也就是 C 标准库. 二者的主要区别在于: POSIX 是 C 标准库的超集(也即是从内容上,C 标准库是 POSIX 库的一部分,POSIX ...
- Python Standard Library
Python Standard Library "We'd like to pretend that 'Fredrik' is a role, but even hundreds of vo ...
- [译]The Python Tutorial#10. Brief Tour of the Standard Library
[译]The Python Tutorial#Brief Tour of the Standard Library 10.1 Operating System Interface os模块为与操作系统 ...
- c++学习书籍推荐《Beyond the C++ Standard Library》下载
百度云及其他网盘下载地址:点我 作者简介 Björn Karlsson works as a Senior Software Engineer at ReadSoft, where he spends ...
- The Python Standard Library
The Python Standard Library¶ While The Python Language Reference describes the exact syntax and sema ...
随机推荐
- Java的Synchronized
原理,注意看输入输出,不了解原理是想不到会这样输出的. http://www.cnblogs.com/paddix/p/5367116.html 还有一个要注意的是一个对象一个monitor类
- 模拟Vue之数据驱动1
一.前言 Vue有一核心就是数据驱动(Data Driven),允许我们采用简洁的模板语法来声明式的将数据渲染进DOM,且数据与DOM是绑定在一起的,这样当我们改变Vue实例的数据时,对应的DOM元素 ...
- jQuery上传插件uploadify 3.2.1
1.属性 名称 默认值 说明 swf [必须设置]swf的路径 uploader [必须设置]服务器端脚本文件路径 uploadLimit 999 最多上传文件数量 checkExisting ...
- RocketMQ初探(五)之RocketMQ4.2.6集群部署(单Master+双Master+2m+2s+async异步复制)
以下部署方式结合众多博友的博客,经过自己一步一步实际搭建,如有雷同,侵权行为,请见谅...其中遇到不少的坑,希望能帮到更多的人,现在很少能找到一份完整版4.2.6版本的搭建教程了,如果你有幸遇见,那么 ...
- unity 设置屏幕旋转
只允许竖屏: Portrait √ Portrait Upside Down √ Landscape Right × Landscape Left ...
- 迷你MVVM框架 avalonjs 1.3.6发布
本版本是一次重要的升级,考虑要介绍许多东西,也有许多东西对大家有用,也发到首页上来了. 本来是没有1.36的,先把基于静态收集依赖的1.4设计出来后,发现改动太多,为了平缓升级起见,才减少了一部分新特 ...
- 序列比对之Biostrings包
基本概念 Biostrings包很重要的3个功能是进行Pairwise sequence alignment 和Multiple sequence alignment及 Pattern finding ...
- ReentrantLock synchronized
关于互斥锁: 所谓互斥锁, 指的是一次最多只能有一个线程持有的锁. 在jdk1.5之前, 我们通常使用synchronized机制控制多个线程对共享资源的访问. 而现在, Lock提供了比synchr ...
- MyBatis传入参数
在MyBatis的select.insert.update.delete这些元素中都提到了parameterType这个属性.MyBatis现在可以使用的parameterType有基本数据类型和Ja ...
- ElementTree 解析xml(minidom解析xml大文件时,MemoryError)
在使用minido解析xml文件时,因为文件过大,结果报错MemoryError.查询后得知是因为minidom在解析时是将所有文件放到内存里的,很占用内存,所以要考虑换一种方法来处理xml文件. ...