随笔分类 -  C++

摘要:前段时间在尝试使用一个C++的GUI库nana。这个库最大的特点在于使用现代C++风格去编写GUI程序,而不需要使用大量的比较丑陋的代码(如MFC中的各种宏),或者其它的非C++元素。这是一个比较新的库,作者是个中国人,有兴趣的朋友可以去试一试,由于使用大量的C++11特性,所以需要VC2013或者... 阅读全文
posted @ 2015-01-22 11:10 tangzhnju 阅读(1631) 评论(4) 推荐(3) 编辑
摘要:最近看到了很多优秀的文章,包括《Why mobile web apps are slow》,实在忍不住翻译出来跟大家分享。这篇文章通过大量的实验和参考文献向我们说明移动应用开发所遇到的问题,基本的观点可以总结为:移动平台的编程环境是一种资源受限(主要是CPU和内存)的环境,在这样的环境下编程,程序员不得不考虑如何高效地利用资源,这些问题不是仅仅靠一些高级语言特性(如垃圾回收)就能够解决的。因为这些高级语言特性在尝试解决一个问题的同时,往往又会引入其它的问题。也就是说,无论编程语言发展到多么高级的层次,程序员的价值永远存在。就像现在科技发展到今天这样的地步,电子竞技还是无法替代体育运动,我们还是 阅读全文
posted @ 2013-07-25 20:27 tangzhnju 阅读(2066) 评论(8) 推荐(2) 编辑
摘要:这篇博客名字起得可能太自大了,搞得自己像C++大牛一样,其实并非如此。C++有很多隐藏在语法之下的特性,使得用户可以在不是特别了解的情况下简单使用,这是非常好的一件事情。但是有时我们可能会突然间发现一个很有意思的现象,然后去查资料,最终学到了C++的一个特性。所以很可能每个人理解的C++都有很大不同,我只是从自己的角度去跟大家分享而已。C++的函数调用相比于C的函数调用要复杂很多,这主要是由于函数重载、类、命名空间等特性造成的。根据Stephan T. Lavavej的介绍,C++编译器在解析一次函数调用的时候,要按照顺序做以下事情(根据具体情况,有些步骤可能会跳过的):1) 名字查找(Nam 阅读全文
posted @ 2013-07-21 11:27 tangzhnju 阅读(9163) 评论(1) 推荐(0) 编辑
摘要:为期3天的微软Build 2013大会结束了,作为微软一年一度的开发者大会,微软也做足了功夫:很多产品(包括Windows 8.1和Visual Studio 2013 Preview)发布,channel9全程直播,可以到http://channel9.msdn.com/Events/Build/2013这边查看会议的所有内容。虽然整个Build大会不像Google的I/O和Apple的WWDC那么热闹(Google和Apple的粉丝比较多),但我倒是一直非常期待,其中最大的期待在于Herb Sutter曾近承诺在2013年上半年提供一个更好支持C++11的VS版本。Herb Sutter( 阅读全文
posted @ 2013-06-29 16:52 tangzhnju 阅读(3855) 评论(4) 推荐(4) 编辑
摘要:LLVM的最新版本3.3终于在6月17日发布了,按之前的计划6月5日就应该发布了,不过毕竟没有太晚,赶在VS2013 preview(6月26日微软Build大会)之前出来了。加上之前gcc4.8.1在5月底6月初发布,当今最优秀的三大C++编译器都在这个月发布重要更新,这个6月份真是C++的好日子啊!LLVM之前就已经宣布做到C++11 Feature Complete了,3.3应该是第一个稳定版,之前gcc4.8.1也同样是全面支持C++11,这篇文章介绍了如何在CentOS上编译安装最新的gcc,VS一直是落后很多的,不过还是很期待VS2013 preview中能增加多少C++11特性。 阅读全文
posted @ 2013-06-18 18:29 tangzhnju 阅读(12405) 评论(16) 推荐(3) 编辑
摘要:今天在用gdb调试C++程序的时候,想用"p i”命令打印出程序的一个局部变量i,却一直提示:No symbol "i" in current context.我愣了下,想到有几种原因可能导致这种情况:1、编译的时候没有加上-g选项,一直编译器没有在可执行程序中加入调试信息;2、编译的时候加上了优化选项,使得编译器把某些变量优化掉了;3、断点加的位置不对,变量超出作用域了。我重新检查了程序以及编译命令,的确是没错的。于是我只能在程序中加了个全局变量gi,然后gdb起来,p gi,发现全局变量却是可以显示的。google了好久都没解决问题,后来再次进入gdb准备尝试 阅读全文
posted @ 2013-06-17 21:48 tangzhnju 阅读(6045) 评论(0) 推荐(1) 编辑
摘要:最近逐渐把开发环境从Windows转到Linux下,原因是Visual Studio提供的环境太庞大,总感觉看不到全貌,并且对于C++11的支持实在是太慢了。而在Linux下,有非常大的选择空间,编辑器可以选vim或者emacs,两者都是顶级的文本编辑器(不仅仅是文本编辑器)。编译器可以选g++或者clang,两者对于C++11的支持已经几乎完整了。另外还有各种优秀的工具可以选择,可以用autotools或者cmake来build工程,用gdb进行调试,用cppcheck做静态类型检查(也可以配置到VS中),用valgrind对程序进行动态分析。这就是Linux的好处,各种优秀的工具随你组合, 阅读全文
posted @ 2013-06-06 11:48 tangzhnju 阅读(9723) 评论(4) 推荐(1) 编辑
摘要:今天在isocpp上看到“GCC 4.8.1 released, C++11 feature complete”这个消息,非常兴奋。终于有一个全面支持C++11语言特性的编译器了!当然了,gcc仅仅是语言特性上全面支持C++11,libstdc++貌似还没有完全跟上,不过我已经挺满足了,至少可以去尝试各种特性了。另外,之前也有消息说Clang功能上也100%支持C++11了,但是内部还在做测试,Clang3.3的release版据说6月5号正式发布,最近对于C++来说大事真多啊,很期待!今天下午看到这个消息,晚上就实在忍不住了,赶紧把最新的gcc下载下来编译安装起来,下面介绍下安装步骤:安装之 阅读全文
posted @ 2013-06-01 22:30 tangzhnju 阅读(24323) 评论(24) 推荐(1) 编辑
摘要:之前就写过一篇博客《C++的高效从何而来》,分析C++中效率问题。最近在Herb Sutter(C++标准委员会的chair)的GotW中看到了这篇文章GotW #2: Temporary Objects (5/10),主要是讲C++中临时对象的问题,文章给出了一段代码,问读者有多少处地方产生了不必要的临时对象。代码如下:string find_addr( list<employee> emps, string name ) { for( auto i = begin(emps); i != end(emps); i++ ) { if( *i == name ) { ... 阅读全文
posted @ 2013-05-10 20:20 tangzhnju 阅读(3052) 评论(8) 推荐(2) 编辑
摘要:C++的复杂是一个基本事实,这也成了很多人对C++横加指责的原因。事实上,正如陈皓在“C++的数组不支持多态”?这篇文章中提到的,很多人在并不真正了解C++的情况下,就喜欢得出这样的结论。更有甚者,把C语言本身的“坑”也归结为C++的问题。这样的人着实不少,C++11作为最具争议的语言之一,每一次讨论到涉及语言选择的时候,都会引起一场“血战”,但结果往往不了了之,喜欢C++的继续坚守C++阵营,讨厌C++的把精力留到下次黑C++的时候。对于客观公正批评C++的,我内心尊敬佩服;而对于还没搞清楚C++就信口开河的,我表示鄙视。任何一门语言都有自己的历史背景和定位,C++被设计成这样,从历史上来看 阅读全文
posted @ 2013-05-05 11:17 tangzhnju 阅读(3162) 评论(13) 推荐(1) 编辑
摘要:最近一直想接触一些新东西,包括新技术,还有新的学习方法。之前自己几乎没有接触过GUI编程(除了曾经用过Win32API画出一个最简单的窗口)。后来无意间翻到过C++之父Bjarne Stroustrup的新书《Programming: Principles and Practice using C++》,这本书的用意是带领没有丰富编程经验的人入门,并没有涉及到过多C++的技术细节,更多地是从程序开发的角度来切入,当然,示例本身是用C++来写的(好歹人家是是C++之父嘛~)。里面专门有一部分介绍GUI,BS采用了FLTK库做了例子,自己做了一些很少的封装,并以此来带领大家入门,内容十分详实,也激 阅读全文
posted @ 2012-12-13 20:19 tangzhnju 阅读(6274) 评论(0) 推荐(2) 编辑
摘要:原文链接:http://zoomzum.com/6-free-c-graphics-and-game-libraries/ 作者的话:上一篇文章中介绍(转载)了8个免费且使用的C++ GUI库,无独有偶,作者无意中又看到了类似的一篇文章,同样出自zoomzum.com。这篇文章介绍了6个免费的C++图形和游戏库。GUI库对应了微软的MFC,提供了程序与用户交互的图形化界面,而图形和游戏库则对应了... 阅读全文
posted @ 2012-12-13 19:49 tangzhnju 阅读(1097) 评论(0) 推荐(0) 编辑
摘要:原文链接:http://zoomzum.com/8-free-and-useful-c-gui-libraries/ 作者的话:C++标准中并没有包含GUI,这也使得C++开发图形化界面需要依赖于第三方的库。实际上,图形界面恰恰是C++的强项,小到平常使用的各类桌面软件,大到魔兽世界这样的游戏,都是C++擅长的地方。C++之所以能做到这一点,原因在于它是一门即能提供极高的性能,又能提供良好接口的... 阅读全文
posted @ 2012-12-13 18:06 tangzhnju 阅读(1396) 评论(0) 推荐(0) 编辑
摘要:上上个月,买了《STL源码剖析》这本书,大概浏览了下,有了个大体的印象。看书的过程中,很多技术细节刚开始还记得的,但是随着内容越来越多,前面看过的知识点到后面就记得不是很清楚了,有点囫囵吞枣的感觉。本书的作者侯捷先生在这本书开始,用“天下大事 必作于细”来激励读者,说明技术细节的重要性。当我第二遍翻开这本书的时候,想征服STL这座大山的欲望也变得更为强烈。从大学开始到现在,一直有个遗憾,就是心态很浮躁,没有静下心来深入地学习一门技术,总是浅尝辄止、半途而废,导致知识点掌握不扎实,什么东西都知道一点,但是什么东西都没有完全掌握。这一点一直困扰着我,也很大程度上阻碍了自己的科研能力。今天,翻开了前 阅读全文
posted @ 2012-12-12 16:03 tangzhnju 阅读(6471) 评论(4) 推荐(2) 编辑
摘要:前段时间一直在学习C++中对象的内存布局,由于C++中支持多继承和虚继承,使得对象的内存布局可能变得有些复杂,刚开始去学习时会有点摸不着头脑。另外不同的编译器很可能有着不同的内存布局,进一步加大了学习难度。网上已经有很多讲解内存布局的文章,其中很多讲得很清楚了,如:http://blog.csdn.net/haoel/article/details/1948051http://www.cnblogs.com/itech/archive/2009/02/27/1399996.htmlhttp://www.cnblogs.com/neoragex2002/archive/2007/11/01/VC 阅读全文
posted @ 2012-12-02 11:29 tangzhnju 阅读(2449) 评论(0) 推荐(1) 编辑
摘要:前一段时间,实验室的一哥们突然跑过来跟我说,“我自己写了个C的快速排序,排了一个10000000个int的数组,貌似比C库中是qsort算法要快,咋回事?C++的STL中快排(quick sort)算法的效率如何?”。 听他这么一说,我就立即做了个实验,写了如下代码: #include <iostream>#include <algorithm>#include <time.h>usin... 阅读全文
posted @ 2012-11-25 16:47 tangzhnju 阅读(2459) 评论(8) 推荐(4) 编辑
摘要:试一下从Writer发布效果如何。//// This is a GUI support code to the chapters 12-16 of the book// "Programming -- Principles and Practice Using C++" by Bjarne Stroustrup//#ifndef GUI_GUARD#define GUI_GUARD#include "Window.h"#include "Graph.h"namespace Graph_lib {//------------------ 阅读全文
posted @ 2012-11-24 21:56 tangzhnju 阅读(2) 评论(0) 推荐(0) 编辑