( 原书第四章,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.

最新文章

  1. Winscp开源的SSH|SFTP
  2. Java小知识--length,length(),size()方法详细介绍
  3. struts2环境配置
  4. Postman 安装及使用入门教程(转)
  5. mysql not in、left join、IS NULL、NOT EXISTS 效率问题记录
  6. MVC-工作原理
  7. 201521123025&lt;&lt;java程序设计&gt;&gt;第4周学习总结
  8. Job for docker.service failed because the control process exited with error
  9. 整理+学习《骆昊-Java面试题全集(中)》
  10. [转帖] SS, SP, BP 三个寄存器
  11. Spring+thymeleaf
  12. iis url重写
  13. 请问在EXECUTE IMMEDIATE中如何使用带有引号
  14. VirtualBox如何扩展虚拟机Ubuntu的硬盘容量-转
  15. vlan交换机的端口模式有哪几种
  16. iOS 各种控件默认高度(图示)
  17. Cocos2d-x学习笔记(七)菜单
  18. JavaScript学习总结(七)——JavaScript函数(function)
  19. F#注解
  20. 【LG5055】可持久化文艺平衡树

热门文章

  1. sssp-webservce_restful
  2. JAVA 连接 Redis 并进行操作
  3. Eclipse在线安装STS插件
  4. 基于OpenGL编写一个简易的2D渲染框架-01 创建窗口
  5. javascript时间日期操作
  6. ios 避免navigationcontroller出现时scrollview内容被resize
  7. get提交时中文传值乱码的有关问题
  8. Java Magic. Part 3: Finally
  9. 利用 setInterval 确定用户的动作是否停止
  10. [故障引起的故事]URL中带加号的处理