摘要: 前段时间在尝试使用一个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 阅读(2065) 评论(8) 推荐(2) 编辑
摘要: 前些日子,看到Herb Sutter在自己的博客中推荐了一篇文章《Why mobile web apps are slow》,在推荐里他这样写道:“I don’t often link to other articles, but this one is worth reading.” 我不经常链接... 阅读全文
posted @ 2013-07-24 23:50 tangzhnju 阅读(43410) 评论(28) 推荐(43) 编辑
摘要: 这篇博客名字起得可能太自大了,搞得自己像C++大牛一样,其实并非如此。C++有很多隐藏在语法之下的特性,使得用户可以在不是特别了解的情况下简单使用,这是非常好的一件事情。但是有时我们可能会突然间发现一个很有意思的现象,然后去查资料,最终学到了C++的一个特性。所以很可能每个人理解的C++都有很大不同,我只是从自己的角度去跟大家分享而已。C++的函数调用相比于C的函数调用要复杂很多,这主要是由于函数重载、类、命名空间等特性造成的。根据Stephan T. Lavavej的介绍,C++编译器在解析一次函数调用的时候,要按照顺序做以下事情(根据具体情况,有些步骤可能会跳过的):1) 名字查找(Nam 阅读全文
posted @ 2013-07-21 11:27 tangzhnju 阅读(9161) 评论(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 阅读(3850) 评论(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 阅读(12384) 评论(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 阅读(5987) 评论(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 阅读(9677) 评论(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 阅读(24309) 评论(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 阅读(3051) 评论(8) 推荐(2) 编辑