当前位置: 首页 > news >正文

网站关键词结构北京网站制作沈阳

网站关键词结构,北京网站制作沈阳,深圳设计网,waf防火墙排名一 .C11新特性 1. auto 类型推导 1.1 当号右边的表达式是一个引用类型时#xff0c;auto会把引用抛弃#xff0c;直接推导出原始类型#xff1b; 1.2 当号右边的表达式带有const属性时#xff0c;auto不会使用const属性#xff1b; 1.3 当const 和引用结合时#xff0c;…一 .C11新特性 1. auto 类型推导 1.1 当号右边的表达式是一个引用类型时auto会把引用抛弃直接推导出原始类型 1.2 当号右边的表达式带有const属性时auto不会使用const属性 1.3 当const 和引用结合时auto将保留表达式的const属性 2.auto使用限制 2.1 auto变量必须初始化 2.2 auto不能在函数参数中使用 2.3 auto不能用于类的非静态成员变量 2.4 auto不能定义数组 2.5 auto不能作用于模板参数 2.6 auto遍历STL容器时修改对象的值不会生效。 3.auto应用场景 3.1 auto用于定义STL中的迭代器 3.2 auto用于泛型编程(模板类和模板函数等) 4.decltype关键字与auto功能类似 4.1 decltype(exp) name value decltype根据表达式exp推导类型根据表达式的返回类型但不可以是void 4.2 如果exp是一个左值或被()包围那么decltype((exp))或decltype(n ab)的类型就是exp的引用 4.3 如果exp是一个函数decltype(exp)并不会执行函数代码。 5.推导类的非静态成员变量或函数返回值类型使用decltype templatetypename T class Base {private:decltype(T().begin()) m_iter; }6.auto与decltype的区别 6.1 const与volatileconst表示只读而volatile表示数据易变简称cv限定符 6.2 auto可能会去掉cv限定符属性而decltype则会保留 7.基于范围的for循环 7.1 遍历 for( auto value : myVector) {//注意value为myVector中的元素而不是下标... } mapstring,string Map; for(pairstring,string value :Map) {//map采用pair来遍历... }7.2 不支持以指针形式返回的数组只能遍历有明确范围的一组数据当使用此方法遍历容器时对某些容器在遍历过程中动态添加元素会导致出错。 8.基于右值引用的移动语义与完美转发 8.1 通常将可位于赋值号()左侧的表达式称为左值只能位于赋值号右侧的表达式就是右值 8.2 左值可以作为右值 8.3 可获取到存储地址的表达式即为左值 8.4 只能操作左值无法添加右值引用右值引用采用来表示 右值引用必须立即进行初始化且只能使用右值进行初始化 int a 10//右值引用可修改a 1009.移动语义 9.1 用一个对象初始化一个同类对象 - 复制构造函数 9.2 移动构造函数使用右值引用的形式作为函数参数 9.3 默认情况下左值初始化同类对象只会调用拷贝构造函数完成如果想要调用移动构造函数则必须使用右值进行初始化为满足这个需求引入了std::move函数它可以将左值强制转化为对应的右值因此而调用移动构造函数 //移动构造函数写法 Student(Student stu) {... } Student stu Student s1 stu Student s2 std::move(stu);10.完美转发 10.1 在函数模板中实现参数的完美转发 10.2 将自己的参数完美的转发给内部调用的其他函数所谓完美即不仅能准确的转发参数的值还能保证被转发的参数的左、右值属性不变 很多场景是否实现完美转发直接决定了该参数的传递过程是使用拷贝语义还是移动语义 注意函数模板使用右值引用定义参数是一种万能引用既可以接收右值也可以接收左值。 templatetypename T void function(T t) {otherdef(t); } //折叠引用规则解决了无论传入的是左值还是右值如何在函数内部连同其左右属性都传入引入了forwordT(){forwordT()}forwordT(); templatetypename T void function(T t) {otherdef(forwordT(t));//维护t的左、右属性实现完美转发。 }11.nullptr关键字 替代NULL0等指针复制 12.智能指针 12.1 share_ptr #includememory using namespace std; std::shared_ptrint ptr;//引用计数为1 std::shared_ptrint ptr(nullprt);//引用计数为0//初始化 std::make_sharedT,有提供拷贝和移动构造函数同一个普通指针不能为多个shared_ptr赋值//自定义释放规则 std::shared_ptrint ptrnew int[10],std::default_deleteint[]()12.2 unique_ptr 每个unique_ptr指针都独自拥有对其所指堆栈内存空间的所有权与shared_ptr不同只提供移动构造函数自定义释放规则 12.3 weak_ptr 配合shared_ptr使用不会使引用计数加1或减1单独使用无意义。 二.std::thread多线程使用心得 1.static_cast 在编译时进行类型检查而对于强制转换则不会进行类型检查 用于基类子类之间的转换 2.std::thread_hardware_concurrency(),获取cpu硬件支持的并发数 3.实现多线程读取文件每个线程对应一个文件对多个文件的数据源进行读取结果汇总。 以下文作者实践后编写的多线程基本框架。 //MultiThread.h及其.cpp文件 #includequeue #include map #includemutex #includethread #includestringclass FileNode { public//每个线程执行的函数主要复则读取file文件CurrentThreadNumber用于指示当前还没有分配的线程数量FileNumber指示还有多少文件没有处理具体实现需要借助m_mutex处理数据保证m_FileMapDataCurrentThreadNumberFileNumber数据正确void ReadFile(std::string filepath,unsigned int CurrentThreadNumber,unsigned int FileNumber);//初始化队列void InitQuque(std::string dir);bool IsQueueEmpty(); //判断队列是否为空具体实现需要借助m_mutex处理数据保证数据正确bool GetQueueData(std::string file);//获取队列中的数据具体实现需要借助m_mutex处理数据保证数据正确bool GetQueueSize(); //获取文件总数 private:std::mutex m_mutex; //互斥信号量用于m_FileQueue和m_FileMapData的线程互斥操作std::queuestd::string m_FileQueue; //文件处理队列std::mapstd::string file,std::string data m_FileMapData; //数据汇总 };class MultiThread { publicvoid RunMultiThread(unsigned int count,std::string dir);//指定运行的线程数量,dir文需要处理的目录 privateFileNode m_Data; };void MultiThread::RunMultiThread(unsigned int count,std::string dir) {unsigned int ThreadCount std::thread_hardware_concurrency() count ? std::thread_hardware_concurrency() - 1 : count;m_Data.InitQuque(dir);//多线程开始前初始化数据unsigned int number m_Data.GetQueueSize();while(!m_Data.IsQueueEmpty()){while(ThreadCount 0){std::string file;if(m_Data.GetQueueData(file)){std::thread th(FileNode::ReadFile,m_Data,file,std::ref(ThreadCount),std::ref(number));//ReadFile里面会互斥的修改ThreadCount和number并通过引用返回结果std::mutex mut;mut.lock();ThreadCount--;//新分配了一个线程ThreadCount就减少一个主线程互斥修改mut.unlock();th.detach();//采用分离式执行子线程不会阻塞主线程多线程并行执行}else break}}//采用while循环使主线程等待所有子线程执行完毕保证主线程不会在子线程之前执行完毕而退出while(number 0) continue; }#include iostream #include ”MultiThread.h“int main(){MultiThread MultiThMultiTh.RunMultiThread(10,D:\\Data\\);return 0; }
http://wiki.neutronadmin.com/news/396466/

相关文章:

  • 做网站价格多少wordpress 极简博客
  • 网站模板 阿里济南联通网站备案
  • 服务器网站维护wordpress模板选择
  • 苏州好的做网站的公司北京哪里有专门做网站的地方
  • 浙江省建设监理协会网站网站开发例子
  • 网站框架方案哪个页面设计培训好
  • 网站标题具体怎样优化做蛋糕的英文网站
  • 网站设计板块自建站电商外贸
  • iis6cgi php网站缓存wordpress主题教程 pdf
  • 郑州市建设安全管理协会网站百度识图扫一扫
  • 游戏网站建设策划书单页面销售信网站赚钱系统
  • 唐山玉田网站建设网站 建设 步骤是
  • 网站上添加子栏目上海最正规的人才市场
  • 个人网站设计html贵阳装饰装修公司网站
  • 网站上广告动图是怎么做的杭州最好的电商培训机构
  • 广东省医院建设协会网站首页免费下载设计素材网站
  • 浏览不良网站会被网警抓吗windows优化大师有哪些功能
  • 龙岗区住房和建设局官方网站搭建微信小程序多少钱
  • 装修网站建设高校网站建设策划
  • 手机网站信任从哪里设置杭州公司注册地址可以是住宅吗
  • 北京专业网站建设服务商学校网站建设小组及分工
  • 开通企业网站需要多少钱甘肃省交通建设集团有限公司网站
  • 网站开发属于什么费用网站开发建设须知
  • 站长工具域名备案查询微网站开发怎么写
  • 市面上做网站多少钱一站式服务平台入口
  • golang 做网站中国互联网大厂排名
  • 网站建设公司哪个好呀微信导航网站怎么做
  • 湄洲岛网站建设会做网站有什么可以做吗
  • 网站制作学校找哪家Wordpress链接的index
  • 深圳企业网站怎么做上海地区网站备案