求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 


业务架构设计
4月18-19日 在线直播



基于UML和EA进行系统分析设计
4月25-26日 北京+在线



AI 智能化软件测试方法与实践
5月23-24日 上海+在线
 
追随技术信仰

随时听讲座
每天看新闻
 
 
C++并发编程(中文版)
前言
第1章 你好,C++的并发世界!
1.1 何谓并发
1.2 为什么使用并发?
1.3 C++中的并发和多线程
1.4 开始入门
1.5 本章总结
第2章 线程管理
2.1 线程管理的基础
2.2 向线程函数传递参数
2.3 转移线程所有权
2.4 运行时决定线程数量
2.5 识别线程
2.6 本章总结
第3章 线程间共享数据
3.1 共享数据带来的问题
3.2 使用互斥量保护共享数据
3.3 保护共享数据的替代设施
3.4 本章总结
第4章 同步并发操作
4.1 等待一个事件或其他条件
4.2 使用期望等待一次性事件
4.3 限定等待时间
4.4 使用同步操作简化代码
4.5 本章总结
第5章 C++内存模型和原子类型操作
5.1 内存模型基础
5.2 C++中的原子操作和原子类型
5.3 同步操作和强制排序
5.4 本章总结
第6章 基于锁的并发数据结构设计
6.1 为并发设计的意义何在?
6.2 基于锁的并发数据结构
6.3 基于锁设计更加复杂的数据结构
6.4 本章总结
第7章 无锁并发数据结构设计
7.1 定义和意义
7.2 无锁数据结构的例子
7.3 对于设计无锁数据结构的指导建议
7.4 本章总结
第8章 并发代码设计
8.1 线程间划分工作的技术
8.2 影响并发代码性能的因素
8.3 为多线程性能设计数据结构
8.4 设计并发代码的注意事项
8.5 在实践中设计并发代码
8.6 本章总结
第9章 高级线程管理
9.1 线程池
9.2 中断线程
9.3 本章总结
第10章 多线程程序的测试和调试
10.1 与并发相关的错误类型
10.2 定位并发错误的技术
10.3 本章总结
附录A C++11语言特性简明参考(部分)
A .1 右值引用
A .2 删除函数
A .3 默认函数
A .4 常量表达式函数
A .5 Lambda函数
A .6 变参模板
A .7 自动推导变量类型
A .8 线程本地变量
A .9 本章总结
附录B 并发库的简单比较
附录C 消息传递框架与完整的ATM示例
 附录D C++线程库参考
D .1 chrono头文件
D .2 <condition_variable>头文件
D .3 <atomic>头文件
D .4 future头文件
D .5 <mutex>头文件
D .6 <ratio>头文件
D .7 <thread>头文件
 

 
目录
自动推导变量类型
作者:Anthony Williams  译者:陈晓伟
99 次浏览
4次  

A.7 自动推导变量类型

C++是静态语言:所有变量的类型,都会在编译时被准确指定。所以,作为程序员你需要为每个变量指定对应的类型。

有些时候就需要使用一些繁琐类型定义,比如:

  1. std::map<std::string,std::unique_ptr<some_data>> m;
  2. std::map<std::string,std::unique_ptr<some_data>>::iterator
  3. iter=m.find("my key");

常规的解决办法是使用typedef来缩短类型名的长度。这种方式在C++11中仍然可行,不过这里要介绍一种新的解决办法:如果一个变量需要通过一个已初始化的变量类型来为其做声明,那么就可以直接使用auto关键字。这样,编译器就会通过已初始化的变量,去自动推断变量的类型。

  1. auto iter=m.find("my key");

当然,auto还有很多种用法:可以使用它来声明const、指针或引用变量。这里使用auto对相关类型进行了声明:

  1. auto i=42; // int
  2. auto& j=i; // int&
  3. auto const k=i; // int const
  4. auto* const p=&i; // int * const

变量类型的推导规则是建立一些语言规则基础上:函数模板参数。其声明形式如下:

  1. some-type-expression-involving-auto var=some-expression;

var变量的类型与声明函数模板的参数的类型相同。要想替换auto,需要使用完整的类型参数:

  1. template<typename T>
  2. void f(type-expression var);
  3. f(some-expression);

在使用auto的时候,数组类型将衰变为指针,引用将会被删除(除非将类型进行显式为引用),比如:

  1. int some_array[45];
  2. auto p=some_array; // int*
  3. int& r=*p;
  4. auto x=r; // int
  5. auto& y=r; // int&

这样能大大简化变量的声明过程,特别是在类型标识符特别长,或不清楚具体类型的时候(例如,调用函数模板,等到的目标值类型就是不确定的)。


您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



99 次浏览
4次