之前说的天马行空的东西,打算用c++写,因为它效率高。这是在别无其他选择的情况下决定用的c++,虽说作为oier要用c++,但是要拿它写项目是真的没谱,指不定哪天写的乱七八糟开始天天重构。
很久很久以前我刚刚学c++,为了写游戏学c++。那时候是刚刚学会了c++语法,一个main函数写到底,字符串是一个字符一个字符的处理,开内存用malloc,游戏内的生物是每人一个线程(因为我不知道怎么让两段代码同时执行)而且完全没有线程安全可言,点运行之后能不能正常启动全看运气。深深的给我留下了阴影...
还有就算坑太多了,莫名奇妙就错误,幸好是静态类型语言,只要编译出来了就没大问题。
因此我很少去碰c++,就算用,也是用QT的C++。
而在我用了几天之后...
新体验
虽然坑还是不少,但在我大概知道了静态类型语言的编译原理之后能够避过不少的坑。
之前在用脚本语言时总是会各种减少代码量,能写一行绝不写两行,能不定义函数就不定义函数,尽可能缩短变量和函数名。但是,现在不需要。首先名字不用考虑,直接中文翻英文,小驼峰命名(学了日语的原因,变量很多不想查翻译的时候就直接上日语读音,其次汉语拼音)。
完全面向对象写,面向对象写习惯了,现在写c++全都用类来写,不定义全局函数,又因为是静态类型语言,IDE知道变量类型,代码提示肥肠肥肠舒服。
静态类型语言嘛,很多问题在所难免,像是,同样的函数要给不同类型写。但是,c++有模版和宏,偶尔也能像动态类型语言一样。虽然说模版在编译的时候会将类型代入,生成不同的类,占用内存,但是c++的代码较脚本语言的代码内存占用肯定非常少吧。
为了复用代码定义出函数,鼠标滚轮要滚上滚下。为了代码清晰和避免循环引用,我把类定义和实现分到两个文件,定义函数更麻烦。也因此造成我不喜欢定义函数,lambda太妙了!
重载运算符,把类像原生类型一样用。
坑
坑虽然多,但不如以前用时候的多。
模板类的定义和实现不能分开。
我想判断一个对象到底是哪个派生类的,但是貌似没办法。最终通过成员函数的多态解决了(虚函数返回一个枚举)。
浮点数比较问题,不知道其他语言有没有这种问题,浮点数有精度损失,所以直接比较两个相同的浮点数很可能判成不相同。我计算两直线交点,然后无论怎么判断,这个交点都不在直线上,于是有了这个宏:
#define f_eps 1e-6f
#define f_equ(a,b) (fabs((a)-(b))<f_eps)
编译通过了,跑到某句话STL就崩了,比如说,map的insert函数,我以key和value传入就会崩,pair<...>(key,value)就没事。可能是我用的不对吧...
看在效率高的份上,就忍一忍吧。不过我记得在哪看的,"能让机器辛苦一点的何必让人辛苦"