
C++王者归来
booirror
享受编程的乐趣
展开
-
一个帖子引发的思考
由于我未能及时回复,我写这文章时,已经结完贴了,从给分来看,帖主是有被误导了。我突然想起了@陈硕 大哥的话,“不上论坛最好。作为初学者,你如何判断论坛上的回答是对还是错?如何判断回答问题的人的水平比你高还是比你低?如何判断他是真懂还是道听途说、人云亦云?”(来源:http://www.zhihu.com/question/20458805/answer/15186919)现在看看,确实有几分道理。即使回答人的水平比你高,你还是判断不出来他说的是对是错。记录在此,希望大家引以为戒!原创 2013-10-29 00:18:42 · 2067 阅读 · 2 评论 -
论C++的多样性
当你开通快捷支付后,不需要输入银行卡密码就可以付款,当你使用微信绑定信用卡向商家展示付款码时,不需要任何密码,你得到了便捷,失去了安全。安全加上便捷的总和是恒定的,两者是此消彼长的关系。好的支付工具寻找安全与便捷的最佳点,而物美价廉的产品是寻找品质与价格的最佳点。万物都在追求性价比,代码也是如此。同样的硬件配置,使用上了最高效的算法,此时,减少边界条件检查就能带来更好的体验,越是使用频原创 2016-04-07 02:02:54 · 1153 阅读 · 0 评论 -
C++11:深入理解右值引用,move语义和完美转发
乍看起来,move语义使得你可以用廉价的move赋值替代昂贵的copy赋值,完美转发使得你可以将传来的任意参数转发给 其他函数,而右值引用使得move语义和完美转发成为可能。然而,慢慢地你发现这不那么简单,你发现std::move并没有move任何东西,完美转发也并不完美,而T&&也不一定就是右值引用……move语义最原始的左值和右值定义可以追溯到C语言时代,左值是可以出现在赋值符原创 2015-04-15 12:45:34 · 47604 阅读 · 14 评论 -
最佳实战:用Cocos2d-x3.x和C++11编写2048游戏以及游戏AI(全民2048 Android版上线啦)
话说,年仅19岁的意大利人Gabriele Cirulli于2014年3月完成并发布在github上,游戏设计来自于《1024》,而《1024》灵感来源于《Threes!》的移动端游戏。然而游戏飙升的人气超乎他的想象,人们忘记了Flappy Bird, 2048成了 网络上“最上瘾的东西”。我是完全为了熟悉Cocos2d-x3.x版本,才写这个游戏的。这个游戏的玩法如下:该游戏使用原创 2015-05-05 00:46:38 · 17230 阅读 · 18 评论 -
初窥c++11:从move语义到右值引用
技术人员往往比较傲慢,写c语言的鄙视c++,写c++的鄙视Java,写Java的鄙视c#,要是程序员吵起来怎么办,一个流行的办法就是去github约架,比赛写tokenizer和grammar analyzer啊,写不出来滚出程序界啊,哈哈。说到github,不得不说去github找份好代码真不容易,大量“坏味道”的代码充斥其中,大有劣币驱逐良币之势。背景为什么需要move原创 2014-04-26 00:46:22 · 7768 阅读 · 5 评论 -
一个可以列出你所有博文浏览量的程序
优快云 blog官方只做出了浏览量前10篇的排行榜,有时候我们也好奇前20篇,前30篇的情况,或者那些文章是阅读量过万或过千的。没有找到一个方便的查看方式,于是乎就写了这么个程序,列出了所以文章,并按照浏览量进行从高到低排序。下面就是我的文章的阅读量:---------------------001 PageViews(29211) 时间复杂度和空间复杂度详解原创 2015-09-12 19:14:06 · 1227 阅读 · 0 评论 -
引用真的是别名吗?
实际上,引用是新的类型(通过重载可以看出来),同时标准也没有规定它是否占用了内存。因此不允许有指向引用的内存。总的来说,引用是c++中的一个语法糖。只是它给程序员带来的坑要远远多于它所带来的甜头。原创 2013-09-22 12:34:23 · 3371 阅读 · 0 评论 -
main函数究竟应该怎么写?
在大多数程序语言里,程序由main函数开始执行,因此被称之为入口函数。然而,当你学了编程一段时间后,你肯定见过不止一种main函数的写法。你有木有想过,究竟那种写法才算是标准的呢?毕竟各个平台对编译器的实现有所不同,往往标准的部分是相同的。如果你的程序是按标准来写的,那意味着你的程序是跨平台的。在这篇文章,我们来谈谈c,c++里main函数该如何写。原创 2013-10-21 19:27:13 · 6065 阅读 · 0 评论 -
C++11,使简单的事情简单
Joe Armstrong说过一句话:面向对象编程语言的问题在于,它总是附带着所有它需要的隐含环境。你想要一个香蕉,但得到的却是一个拿着香蕉的大猩猩,和整个丛林。显然地,这将简单问题复杂化了。我们不否认这个世界上,有些代码是不能简单化的。对于那些可以简单化的代码,我们还是希望不要复杂化。如果你是这样的人,没有理由不使用C++11。下面将展示C++11是如何奇迹般地使代码简单原创 2015-04-22 01:26:55 · 2114 阅读 · 2 评论 -
duang!!!为什么函数可以返回unique_ptr
从智能指针说起 unique_ptr取代auto_ptr 返回值优化(RVO) make_unique原创 2015-03-19 11:48:44 · 7255 阅读 · 1 评论 -
放开那JSON
JSON——JSON解析——开源jsonar库原创 2015-03-25 22:43:53 · 1164 阅读 · 0 评论 -
c++ const成员函数的纠结
const的美妙在于它能让你规定一个语义上的常量。应该尽可能地在代码中使用它,全局作用域,命名空间内,类里面都可以使用, 不管是静态还是非静态的对象,你都可以使用它。一个const对象,它只能调用const函数。因为非const函数,可能会修改这个对象。因此,如果一个成员函数,它不会修改任何非static 成员数据,你应该声明为const。比如:class String {原创 2015-01-19 20:34:08 · 1169 阅读 · 2 评论 -
c++史前时代与带类的C
c++史前时代1979年,Bjarne Stroustrup,中文名挺拗口的,通常称之为BS,在贝尔实验室开始开发C++语言。为什么要发明新的语言呢?这涉及到作者之前的经历。那时,BS在剑桥读博士学位,研究大型软件的开发。BS用Simula开发了个模拟器,但它的运行速度很慢,BCPL的运行效率是很高,但很低级,开发效率低。因此BS产生发明一个新语言的念头。下面是BS的一些观点:原创 2014-10-27 00:20:17 · 2319 阅读 · 0 评论 -
初窥c++11:lambda函数及其用法
为什么需要lambda函数匿名函数是许多编程语言都支持的概念,有函数体,没有函数名。1958年,lisp首先采用匿名函数,匿名函数最常用的是作为回调函数的值。正因为有这样的需求,c++引入了lambda 函数,你可以在你的源码中内联一个lambda函数,这就使得创建快速的,一次性的函数变得简单了。例如,你可以把lambda函数可在参数中传递给std::sort函数#include原创 2014-05-25 19:13:40 · 44689 阅读 · 1 评论 -
初窥C++11:自动类型推导与类型获取
decltype这个特性,BS在2002年就提议标准化这类操作符了。gcc c++编译器于2008加入该特性,visual c++ 2010以扩展形式提供了该特性,到c++11才加入标准。而普及到大众程序员的时间大概是2013前后吧。可见,技术的发展或许快,然而这只是局部性的。要普及到大众,速度就有点慢了。想想人生真正奋斗的时间也就短短几十年,推广普及一个技术,真要消耗人的一生光阴。现在的BS已经是白发苍苍矣。原创 2014-05-14 00:16:40 · 9538 阅读 · 0 评论 -
挤公交闲谈与虚析构函数精讲
好了,使用多态时记得把析构函数声明为vitual。那我要问了,我不使用多态,析构函数就不必要是vitual的吗?再看看这种情况,比如要延迟删除某些对象,我们可能会把这些派生类以父类指针的形式存放在容器中,然后在某个时刻集体delete。要知道,继承不一定要用多态,继承可以提高代码复用。然而这里的基类的析构函数显然要声明为vitual。不过,我倒是觉得,上面这种情况可以说就是是多态,析构函数不就是特殊点的函数嘛,肯定也是晚绑定。因此,到目前为止,我认为如果没有任何多态使用,那么这个类的析构函数就没必要原创 2013-11-24 13:47:51 · 1456 阅读 · 0 评论 -
优先队列priority_queue的使用
#include #include #include using my_pair_t = std::pair;using my_container_t = std::vector;void test_priority_queue(){auto my_comp = [](const my_pair_t e1, const my_pair_t& e2){原创 2017-04-03 19:51:56 · 831 阅读 · 0 评论