
C++
xcyl
这个作者很懒,什么都没留下…
展开
-
C++11中实现类似golang的defer
golang中有个处理异常的关键字defer应用场景类似于java里面的finally,使用的时候就是所有的其他的正常的函数进程执行完毕之后都要执行defer。也就是被defer修饰的函数或者语句都是等到所有的作用域内部的函数执行完毕才会执行。defer的这个特性正好契合C++的RAII。那我们能不能利用RAII实现defer的功能呢。思路RAII我们知道对象在作用域结束自动析构,那...原创 2019-12-11 21:52:49 · 770 阅读 · 0 评论 -
C++静态多态CRTP
CRTP指的是Curiously Recurring Template Prattern,这是一种可以实现静态多态的惯用法。我们知道C++中,你不能将基类的虚函数定义为模板函数。这时你就可以考虑使用CRTP。在以后的Modern C++改进设计模式中会有所使用。并且,CRTP不需要像动态多态那样携带虚表和虚指针,拥有更快的运行效率http://eli.thegreenplace.net/2013/1原创 2016-07-18 21:39:11 · 2994 阅读 · 0 评论 -
Modern C++(六)强类型枚举enum
我们都知道在C++11前的枚举类型是默认为int类型,不是强类型的,所以毫无关系的两个枚举类型可以进行比较enum EnumA{ A = 1, B = 2};enum EnumB{ C = 1, D = 2};if (EnumA::A == EnumB::C){ //...}并且还隐藏着另外一个问题,由于枚举类型的元素是完全暴露出来的,其作用域内不原创 2016-11-03 00:05:31 · 948 阅读 · 0 评论 -
Modern C++(一)auto自动类型推导
从今天开始,我会将自己一直以来使用C++11的新特性记录下来。作为自己职业生涯的记录以及经验分享。第一篇我给了auto关键字,这是因为实际使用中,确实auto给我们开发效率提升了很多,确实使用的也算是最广。在C++11之前已经有了auto,它指代的是“一个自动存储变量的关键字,也就是申明一块临时的变量内存”,比如:auto int i = 5; 我们很少使用,因为非static的变量本身就是自动存储原创 2016-10-28 23:34:33 · 695 阅读 · 0 评论 -
Modern C++(二)Range-based for loop(基于范围的for循环)
上篇文章我们介绍了auto关键字,最后举了个示例说明auto在改善遍历容器方面的作用。在C++11标准中我们有了Range-based for loop,就是基于范围的for循环,这让我们遍历容器更加的容易。我们先看使用示例。原创 2016-10-29 00:03:13 · 727 阅读 · 0 评论 -
Modern C++(三)decltype关键字
C++11中新添加了decltype关键字,它用于在编译时推导表达式的类型。因为decltype在编译期推导类型,并不会计算表达式的值。 我们看一下它是如何使用的//注释为变量类型int a = 5;decltype(a) b = 5; //intdecltype(a + b) c = 5; //intconst int& d = a;decltype(d) e原创 2016-10-29 02:48:58 · 500 阅读 · 0 评论 -
Modern C++(四)左值与右值
在之前的文章里,我们提到了lvalue、rvalue、xvalue。在C++11之前,左值指的是表达式左边的值,右值指的是表达式右边的值。比如//a为左值,(b + c)为右值a = b + c;这是一个很简单的辨别方法。但C++中有个辨别左值右值的更准确的方法: 可以对其取地址的值为左值,否则为右值在上面的示例中我们可以使用auto d = &a;,但是你无法使用auto e = &(b原创 2016-10-30 01:27:14 · 546 阅读 · 0 评论 -
Modern C++(五)nullptr关键字
我们都知道在C++11标准之前使用NULL对指针进行置空。但这是不严谨的使用方式。因为在C语言中#define NULL ((void*)0)并且支持#define NULL 0但在C++中#ifndef NULL #ifdef __cplusplus #define NULL 0 #else #define NULL ((void *)0)原创 2016-10-30 02:05:30 · 416 阅读 · 0 评论 -
编译时遇到stray '\239' inprogram,stray '\187' inprogram,stray '\191' inprogram的解决办法
使用用户提供的交叉编译工具链编译程序时遇到一个编译错误stray '\239' inprogramstray '\187' inprogramstray '\191' inprogram初看这个错误摸不着头脑,网上的解决方案也是一本正经的胡说八道那我们来看看239 187 191是什么,也就是EF BB BF原来是utf-8的BOM,那原因我大概了解了这个源码的文件格式是带BOM的ut原创 2017-11-30 10:33:02 · 2578 阅读 · 0 评论