随笔分类 - C++
摘要:新规范的目标: 让代码排错更加简单 程序员专心于业务逻辑 将一些错误交给编译器处理 提高代码可维护性 逐步实现插件化 编码 使用array(QT下用QVarLengthArray)代替和vector代替原生数组,除非与外部库交互,否则不要直接操作内存(即暴露data的接口) 关于array和vect
阅读全文
摘要:几个自己比较关注的C++新标准,说是17的标准,不过估计要拖到20才能真正支持 Module python的import之类的东西 解决问题: include头文件导致速度变慢的问题 目前VS2017部分支持,不过也只是实验性质的,看看就好了 Module: https://blogs.msdn.m
阅读全文
摘要:错误处理在编程中是很重要的,可以在调试,发布的时候少了很多麻烦,以往在做软件的时候总是少了错误处理,导致用户用来莫名其妙,在查找问题的时候也是没有头绪最近在总结一些错误处理技巧,总共有这么一些方法:1.LOGlog在关键的时刻可以救命的东西,因此我一直提议组里的人多使用log,但是log记多了也不好...
阅读全文
摘要:最近在用python写一些辅助脚本,发现每次运行的时候都会出现无法解析的字符编码的问题后来发现是因为在代码的头里面加了这么一行#coding=utf-8加了这么一行就会出现这个错误SyntaxError: (unicode error) 'utf-8' codec can't decode byte...
阅读全文
摘要:最近用QT,需要在界面上显示中文,发现QT无法直接在代码中写中文,只能通过曲线救国的方式,比如用QT语言家,QTextCodec的fromloca8bit研究了半天,终于明白了一些编码的问题1.VS的编码保存到内存中是以何种编码保存到内存里面的这个是根据VS的文件->高级保存选项里面的编码来决定的比...
阅读全文
摘要:最近在用python做项目,发现有GC的项目真的是爽记得之前看>的时候,C++之父说过,异常最早的出现是为了容错,而不是为了替代错误处理机制http://www.cnblogs.com/linyilong3/p/3724006.html不过后来我觉得异常没用是因为C++的资源问题,所以导致我一直不喜...
阅读全文
摘要:最近将公司的界面开发库从WX转换到了QT,有了信号和槽,原本我们在使用WX的时候,为了使用信号,我们是使用BOOST的signal2库,到了QT有了信号槽,这个就没什么必要了但是前段时间使用QT发现QT的信号和槽没有placeholder,也就是占位符,于是信号和槽声明只能严格地一样,比如void ...
阅读全文
摘要:看了很多篇文章,现在终于搞懂了C++ 中的右值以及std::move左值和右值最重要的区别就是右值其实是一个临时的变量在C++ 11中,也为右值引用增加了新语法,即&&比如如下代码:void testFunc(int &i ){ std::cout<<"reference test func...
阅读全文
摘要:这段时间在对我们项目的代码进行重构,发现我们以往开发软件的时候耦合度非常高, 最严重的是很难对软件进行扩展和删减,现在对软件进行扩展的功能成本非常大比如我们有一个模块a,当到打一定的时间,或者说条件后,需要调用它:function(){function_a1()function_a2()functi...
阅读全文
摘要:我们在使用BOOST的时候,如果需要链接一些库,是不用我们手动去链接的,归根结底还是boost的auto_link这个机制,在boost下的auto_link.hpp这个文件夹里面,基本可以看出要根据什么宏定义去控制boost去链接什么库,比如lib开头的库编译出来的lib库,如果没有lib开头的,...
阅读全文
摘要:1.异常出现的目的在c++语言的设计和演化中,Bjarne Stroustrup说过异常的设计假定如下情况:基本上是为了处理错误与函数定义相比,异常处理是很少的与函数调用相比,异常出现的频率较少异常仅仅是语言层次上的概念同时:异常不是为了作为另外一种返回机制,而是一种容错机制不是想把函数都转变成一个...
阅读全文
摘要:今天在写C++程序的时候,有一个使用了三年多的模型,大概是这样的:有一个界面捕获需要主窗口的鼠标事件的时候,那么他就需要从IMouseEvent继承接口,然后像RegisterEvent(IMouseEvent *event)注册,如果有鼠标事件,主窗口会通过调用虚函数来通知这个界面我们一般的代码是...
阅读全文
摘要:1.编译器断言技巧大致跟后面的一样,都是利用偏特化,但是在C++ 0X里面已经有static_assert,所以感觉这东西也没什么用处了,更多的只是开阔眼界2.偏特化就是专门对一个类型去进行特殊的处理,毕竟template会给生成所有的类型相同的操作,但是有时候我们需要对特定的几个类型去处理,于是就有了特化和偏特化3.局部类一直被忽略的C++的语法,可以直接在类或者函数里面定义类,不过一直被忽视就对了,感觉这个还是挺有意思的4.常数映射为型别:template struct Int2Type{ enum { value = v;}}这样的话,每次用不同的数字去实例化Int2Type...
阅读全文
摘要:http://blog.csdn.net/zhoudaxia/article/details/4486487这篇博客讲得挺清楚的,本来想自己写写看总结下的,不过看了下这个文章已经写得很清楚了,倒没有必要了,总得来说,要了解traits和policy,需要了解下面这三个点1.什么是特化,什么是偏特化顾名思义,特化就是针对一些特殊的类型进行变化,毕竟C++的模板是什么类型都能放进去的,但是有些类型就是比较独特,需要做特别的处理,这个就有了特化和偏特化,在这篇博客中作者特化了AccumulationTraits的int和char2.利用typedef来抽象数据类型当要把两个类中的不同的类型统一成一种
阅读全文
摘要:1.lambda表达式lanbda表达式简单地来讲就是一个匿名函数,就是没有名称的函数,如果以前有接触过python或者erlang的人都比较熟悉这个,这个可以很方便地和STL里面的算法配合 std::for_each(list.begin(),list.end(), [ &tmp,id ](struct ComingVesselInfo *info) { if( info->m_nShipID == id) { ...
阅读全文
摘要:国庆这两天在家里看了>,加上之前看过>和>这两本书,总觉得原来高端的东西似乎也没那么神秘,里面的模式自己在工作中也都用到过,并没有怎么特意地去学习,都是自己写代码总结出来的,看了三本设计模式的书,最终记住的模式也没几个,或者说,最终自己也没学到什么东西谈设计模式一定要谈到面向对象,面向对象的本质是多态,封装和继承,设计模式则能使不稳定依赖于相对稳定、具体依赖于相对抽象,避免会引起麻烦的紧耦合,以增强软件设计面对并适应变化的能力更多的来看,设计模式更像是对于面向对象编程的一种补充,是为了代码的重用性、灵活性和扩展性。但是,不管是重用,灵活,扩展,最起码的基本要求是代码的可读性为
阅读全文
摘要:例如有一个base类型的class,有成员函数fun,当执行class.fun(),那么C++编译器会先进行如下转换:如果是非静态函数成员:1.改写函数原型,class.fun()变成class::fun( base const *this),如果是const,则变成class::fun(const base const *this)2.将fun函数里面对于非静态成员函数的存取操作改成又this指针来存取,比如fun里面访问了成员函数a,那么编译器会改写成this->a3.对成员函数经过mangling,即矫正,变成外部函数,而这个外部函数的名称是独一无二一的,比如class.fun()
阅读全文