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

莱芜网站seowordpress know how

莱芜网站seo,wordpress know how,国外优秀vi设计案例,网站建设中图片怎么样文章参考#xff1a;https://zhuanlan.zhihu.com/p/588826142?utm_id0 最近学了一会感慨到找工作好难#xff0c;上周面试了一家医疗公司#xff0c;准备攒攒经验但是不去#xff0c;结果三天了没消息#xff0c;感觉一面都没过… 本来自傲看不上#xff0c;结果人家也…文章参考https://zhuanlan.zhihu.com/p/588826142?utm_id0 最近学了一会感慨到找工作好难上周面试了一家医疗公司准备攒攒经验但是不去结果三天了没消息感觉一面都没过… 本来自傲看不上结果人家也看不上你…没事攒攒经验面试官问了是否会C14我说我不会问题不大现在看看来得及 1. 变量模版 /*1. 变量模版 ------------*/ //1.引入的意义以前只有模版类和模版函数比如我想定义一个各种类型的常量那么不能用模版,C14可以了 template typename T constexpr T pi T(3.1415926);//类内模版变量的定义 struct VariableTemplate1 {templatetypename Tstatic T min; }; //注意这里要加一个T min会使用默认值 templatetypename T T VariableTemplate1::min {};//但是你可以偏特化 template const float VariableTemplate1::minfloat 6.666; template const std::string VariableTemplate1::minstd::string hhh; //我可以理解为变成了三个变量 //变量模版和类型推导 template typename T constexpr T pi1 T{3.1415926};void testVariableTemplate() {//pi是一个doubledouble diameter 2 * pidouble * 3;std::cout diameterdouble diameter std::endl;//pi是一个intdiameter 2 * piint * 3;std::cout diameterint diameter std::endl;VariableTemplate1::minint 3;std::cout VariableTemplate1::min VariableTemplate1::minint std::endl;// VariableTemplate1::minstd::string hhh; //会报错因为int模版对应了默认的模版值现在不知道对应哪个模版std::cout VariableTemplate1::min VariableTemplate1::minstd::string std::endl;std::cout VariableTemplate1::min VariableTemplate1::mindouble std::endl;std::cout VariableTemplate1::min VariableTemplate1::minfloat std::endl;//0 ???是不是因为第一次确定类型之后就不会改了auto pi3 piint;auto pi4 pidouble;auto pi5 pichar;std::cout pi3 pi3 std::endl;std::cout pi4 pi4 std::endl;std::cout pi5 pi5 std::endl;/*diameterdouble 18.8496diameterint 18VariableTemplate1::min 3VariableTemplate1::min hhhVariableTemplate1::min 0VariableTemplate1::min 6.666pi3 3pi4 3.14159pi5 */}问题 为什么一个min可以对应这么多值所以实际上它是会根据实例化的值生成一个单独的值 感受 1 . 它可以与auto配合使用去做类型转换生成不同的常量。 2 . 可以用于在一个类里面定义很多不同类型的静态常量 2.lambda /*2. lambda表达式的改动 ------------*/ //1. 支持lamda泛型参数 //2. 支持初始化捕获void testLambda() {int x 7;//捕获x并给它初始值意义在哪里auto func [x 3](auto y) {return xy;};//泛型参数这个比较好理解初始化捕获有什么好处呢。在c11中lambda表示捕获变量只能通过值捕获或者引用捕获支持了初始化表达式之后我们就可以更灵活的捕获了比如移动捕获std::string str xixixixi;std::string str1;auto func1 [str1 std::move(str)]{return str1 , hhhhhh;};std::cout func(3) func(3) std::endl;std::cout func(4.5) func(4.5) std::endl;std::cout func1() func1() std::endl;/*func(3)6func(4.5)7.5func1()xixixixi, hhhhhh*/ } //如果有学习c11的function、bind以及lambda表达式你应该会知道bind相对于lambda表达式的两个最重要的优势就是泛型参数和移动捕获从c14之后bind的这个两个优势就完全不复存在了并且lambda表达式对象会比bind生成的对象更小所以基本上可以让bind光荣的下岗了但是实际bind到了c20以后也依旧存在哪可能有它存在的意义把。3. constexpr限制放宽 /* 3. constexpr限制放宽------c11中constexpr修饰变量要求变量必须是可以在编译器推导出来 constexpr修饰函数其实就是修饰函数返回值除了可以包含 using 指令、typedef 语句以及 static_assert 断言外只能包含一条 return 返回语句 constexpr同时可以修饰构造函数但是也会要求使用这个构造函数时可以在编译器就把相关的内容全部推导出来 c14中对constexpr的限制放宽了允许使用循环、if、switch等等语句但是主旨还是一样的需要在编译期间就可以计算出全部内容限制放宽之后这个关键字便可以更灵活的使用了。*/ //比如在c11中如果想用constexpr计算前n项和那么需要像下面这样写constexpr int testConexpresFunc1(int n) {return n 0 ? testConexpresFunc1(n - 1) n : 0; }//在c14中就可以使用if、局部变量和循环了c14可以c11报错 constexpr int testConexpresFunc2(int n) {if (n 0){return 0;}int sum 0;for (int i 1; i n; i) {sum i;}return sum;/*testConexpresFunc1(5) 15testConexpresFunc2(5) 15*/ }4. 数字分隔符 // 三个数字的结果完全一样int val1 100000000;int val2 100000000;int val2 100000000;5. 函数返回值推导 /*5. 函数返回值推导 ------------*///回顾c11返回值类型后置,一定要auto decltype templatetypename T, typename U auto add1(T a, U b)-decltype(ab) {return ab; }//c14之后相当于不需要decltype了 templatetypename T, typename U auto add2(T a, U b) {return ab; }//限制条件如下 //1. 如果有多个推导语句那么推导的结果必须保持一致实际上编译器就是根据函数里面的return推导的吧 // 编译报错第一个return推导为int第二个return推导为double两次推导结果不一致 //报错 auto in return type deduced as double here but deduced as int in earlier return statement //auto add3 (int flag) //{ // if (flag 0) // { // return 1 ; // } // else // { // return 3.14; // } //}//2.如果没有return或者return为void类型那么auto会被推导为void。 //3. 一旦在函数中看到return语句从该语句推导出的返回类型就可以在函数的其余部分中使用包括在其他return语句中即优先推导论优先推导是什么类型就是类型。 auto add4(int i) {if (i 1){return i; // 返回值被推导为int}else{return add4(i - 1) i; // sum的返回值已经被推导出来了所以这里是没有问题的} } //报错Function add5 with deduced return type cannot be used before it is defined //auto add5(int i) //{ // if (i 1) // { // return add5(i - 1) i; // } // else // { // return i; // } //} //4. 不能推导初始化列表。 //报错Cannot deduce return type from initializer list //auto add6(int i) //{ // return {1,2,3,4}; //} //5. 虚函数不能使用返回值推导void testTrailingReturnType() {std::cout add1(5,2) add1(5,2) std::endl;std::cout add2(5,2) add2(5,2) std::endl;std::cout add4(5,2) add4(5) std::endl;/*add1(5,2) 7add2(5,2) 7add4(5,2) 15*/ }6. [[deprecated]]标记 美 [ˈdeprəkeɪtɪd] vt. 强烈反对抨击对……表示不赞成 /*6. [[deprecated]]标记 ------------*/ //在打算废弃一些接口的时候可以直接打个标记过渡然后在后续的版本就可以完全清理掉。 [[deprecated]] void deprecatedFunc() {//do nothing }void testDeprecatedFunc() {//warningdeprecatedFunc is deprecateddeprecatedFunc(); }7. 库的新特性 /*库的新特性*/ /*7. 新增std::make_unique*/ class A { public:A(const int a):a_(a){}int getA(){return a_;} private:int a_; }; void testMakeUnique() {//新增std::make_uniquestd::unique_ptrA pt std::make_uniqueA(1);std::cout pt pt-getA() std::endl; }/*2.新增读写锁std::shared_timed_mutex与std::shared_lock*/ //c11引入了多线程线程的一些库但是是没有读写锁的因此在c14引入了读写锁的相关实现头文件shared_mutex其实c14读写锁也还不够完善知道c17读写锁这块才算是完备起来后面写c17的时候计划把这块再完整的梳理一下。 /* 当Mutex是shared_mutex 的时候1.当有函数使用共享锁时能够与其他享有共享锁的函数也能并发同步执行。而和所有独占锁的函数是互斥的。2.当有一个函数使用独占锁时其他所有的用同一个Mutex带锁的函数都是与其互斥的。 */ //我理解是这个std::shared_mutex实际上是互斥量是否是共享锁取决于用std::shared_lockstd::shared_mutex 还是std::unique_lockstd::shared_mutex 还是std::lock_guardstd::shared_mutexstd::shared_mutex g_sMutex; std::shared_timed_mutex g_shared_m; void writeTime(const std::string funName ,int time) {for (size_t i 1; i time; i) {std::string outPut funName : std::to_string(time);std::cout outPut std::endl;sleep(1);}}void shared_1(int seconds) {std::shared_lockstd::shared_timed_mutex sl(g_shared_m);std::cout shared_1 std::endl;writeTime(shared_1 , seconds); }void shared_2(int seconds) {std::shared_lockstd::shared_timed_mutex theLock(g_shared_m);std::cout shared_2 std::endl;writeTime(shared_2, seconds); }void testSharedMutext() {std::vectorstd::thread vecThrea;vecThrea.push_back(std::thread(shared_1,10));vecThrea.push_back(std::thread(shared_2,10));for (auto oneThread : vecThrea){oneThread.join();}/*shared_1shared_2shared_2:10shared_1:10shared_2:10shared_1:10shared_2:10shared_1:10shared_1:10shared_2:10shared_1:10shared_2:10shared_1:10shared_2:10shared_1:10shared_2:10shared_2:10shared_1:10shared_2:10shared_1:10*/ } /*3. 新增std::exchange*/ //c14新增了一个接口std::exchange头文件utility其实这个也并不算是新增的因为这个接口其实在c11的时候就有了只不过在c11中作为一个内部函数不暴露给用户使用在c14中才把它暴露出来给用户使用。使用方法也很简单。 //exchange会把第二个值赋值给第一个值但是不会改变第二个值。我们来看下它的实现吧。//自己仿写一个, 除此之外我们这里说明一个关键的点。exchange的第二个值是万能引用所以说他是既可以接收左值也可以接收右值的所以我们可以这样来使用。 template typename T, typename U T myExchange(T a, U b) {T old_value std::move(a);a std::forwardU(b);return old_value; }void testExchange() {std::string s1 hello;std::string s2 world;std::cout s1 s2 std::endl;std::exchange(s1, s2);std::cout s1 s2 std::endl;/*hello worldworld world*/myExchange(s1, s2);std::cout s1 s2 std::endl;myExchange(s1, std::move(s2));std::cout s1 | s2 std::endl;/*hello worldworld worldworld worldworld|*/}/*4. 新增std::quoted英 [kwəʊtid] 美 [ˈkwoʊtɪd] v. 引证quote 的过去式*/ //C14引入std::quoted用于给字符串添加双引号void testQuoted() {std::string str Hello world!;std::cout str std::endl;std::cout std::quoted(str) std::endl;/*Hello world!Hello world!*/ }
http://www.hkea.cn/news/14593570/

相关文章:

  • 网站建设合同样本响应式布局的优点是什么
  • 长沙经开区建设局网站漳州专业网站建设公司
  • 番禺 大石网站建设互联网广告代理加盟
  • 网站建设 中企动力 石家庄个体户怎么做购物网站
  • 郑州网站建设 华数网站建设注册什么公司好
  • 毕设做网站和app留言板网页模板
  • 上海网站开发哪家好薇wordpress例
  • 网站里面的视频功能怎么做上海金山区建设局网站
  • e4a做网站软件专业的佛山网站设计
  • 9.9网站怎么做舞台灯光网站建设公司
  • 本地化吃喝玩乐平台网站可以做吗品牌建设需打持久战
  • 百度上怎么做网站国外虚拟主机wordpress
  • 大连建站平台优惠云服务器
  • 网赌网站国外空间给公司做网站费用
  • 成都犀牛网站建设公司大连网站开发公司排名
  • 网站对不同分辨率怎么样建设一个电影网站视频
  • 尚易企业邮箱登录入口网站seo排名优化软件
  • 和田网站建设外贸手机网站
  • 建设部网站在哪里报名考试网站建设福永附近网络公司
  • 电子商务网站功能设计与分析网站建设 模版
  • 涪城移动网站建设创业平台是什么意思
  • 郑州微网站网站建设结算方式
  • 天河手机建网站深圳南园网站建设
  • 漳州网站建设哪家最正规wordpress the date
  • 鼎豪网站建设django网站开发流程
  • 托管网站费用网站大全免黄
  • 古田网站建设鄂州网站制作企业
  • 网络营销网站网站建设公司后端招聘要求
  • 创造网站的软件网站模板在线预览
  • 宜春网站制作网站搜索引擎收录