代码改变世界

文章分类 - c++(转)

Qt5 中对 C++11 一些新特性的封装

2012-06-12 11:57 by Rollen Holt, 7103 阅读, 收藏, 编辑
摘要: C++11是现在的 C++标准的名称,C++11为C++语言带来很多新特性。而 Qt 4.8是 Qt 首个在其 API 中开始使用一些新的 C++11 特性的版本,我之前写过一篇博文:C++11 in Qt 4.8描述了这个问题,这里不再罗嗦。在 Qt5 中,提供更多 C++11 的特性支持,接下来我们将进行详细的说明。slots (槽) 的 Lambda 表达式Lambda 表达式是 C++11 中的一个新语法,允许定义匿名函数。匿名函数可用于使用小函数作为参数,而无需显式的进行声明。之前可以通过编写函数指针来达到同样的目的。在 Qt 4.8 中已经可在一些 QtConcurrent 函数中 阅读全文

C技巧:结构体参数转成不定参数

2012-05-22 23:01 by Rollen Holt, 523 阅读, 收藏, 编辑
摘要: 酷壳:http://coolshell.cn/articles/2801.html下面这段程序是一个C语言的小技巧,其展示了如何把一个参数为结构体的函数转成一个可变参数的函数,其中用到了宏和内建宏“__VA_ARGS__”,下面这段程序可以在GCC下正常编译通过:#include <stdio.h> #define func(...) myfunc((struct mystru){__VA_ARGS__}) struct mystru { const char *name; int number; }; void myfunc(struct mystru ms ){ printf( 阅读全文

9 个开始使用 C++11 的理由

2012-05-14 12:55 by Rollen Holt, 318 阅读, 收藏, 编辑
摘要: 如果你的代码工作正常并且表现良好,你可能会想知道为什么还要使用C++ 11。当然了,使用用最新的技术感觉很好,但是事实上它是否值得呢?在我看来,答案毫无疑问是肯定的。我在下面给出了9个理由,它们分为两类:性能优势和开发效率。获得性能优势理由1:move语义(move semantics)。简单的说,它是优化复制的一种方式。有时候复制很显然是浪费的。如果你从一个临时的string对象复制内容,简单的复制指针到字符缓冲区将比创建一个新的缓冲区再复制要高效得多。他之所以能工作是因为源对象超出了范围。然而,在这以前C++并没有判断源对象是不是临时对象的机制。move语义通过除了复制操作外还允许你有一个 阅读全文

Hackbuteer1的专栏Stay Hungry,Stay Foolish!

2012-05-09 14:09 by Rollen Holt, 2127 阅读, 收藏, 编辑
摘要: 转自:http://blog.csdn.net/Hackbuteer1/rss/list[原]九度互动社区IT名企招聘上机考试热身赛http://ac.jobdu.com/problem.php?id=1326Waiting in Line//简单模拟题#include<iostream>#include<cstdio>using namespace std;#include<memory.h>int pt[1001],leave[1001],start[21];int n,m,k,q;inline bool scan_d(int &num) // 阅读全文

Boost 库中的实用工具类使用入门

2012-05-07 14:10 by Rollen Holt, 287 阅读, 收藏, 编辑
摘要: 简介:实用工具类开发和维护会耗费程序员的时间。Boost 通过提供几个高质量的库,从而简化了此过程,您可以将这些库轻松集成到现有的代码库中。本文简单概述一些较流行的 Boost 实用工具类,并帮助您了解如何将它们投入使用。参见文章:http://www.ibm.com/developerworks/cn/aix/library/au-util_boost_lib/ 阅读全文

内存池

2012-05-07 13:49 by Rollen Holt, 296 阅读, 收藏, 编辑
摘要: 转自http://www.ibm.com/developerworks/cn/linux/l-cn-ppp/index6.html (还没看懂,先Mark一下)如前所述,读者已经了解到"堆"和"栈"的区别。而在编程实践中,不可避免地要大量用到堆上的内存。例如在程序中维护一个链表的数据结构时,每次新增或者删除一个链表的节点,都需要从内存堆上分配或者释放一定的内存;在维护一个动态数组时,如果动态数组的大小不能满足程序需要时,也要在内存堆上分配新的内存空间。6.1.1 默认内存管理函数的不足利用默认的内存管理函数new/delete或malloc/free在堆 阅读全文

[cpp] I/O操作符号返回数值问题

2012-05-02 16:33 by Rollen Holt, 346 阅读, 收藏, 编辑
摘要: 原文地址:http://www.cnblogs.com/alex-tech/archive/2012/03/27/2420197.htmlI/O操作符号(<<和>>)返回数值最近博问里有几个问题都牵涉到这一点了,简单做笔记说明一下。首先cin是一个对象,不会"返回"值,>>和<<才是方法,具有返回值。>>和<<操作符的运算顺序是由左向右边,所以下面的两种语句描述其实是一致的:cin>>a>>b>>c;(((cin>>a)>>b)>> 阅读全文

C++ 工程实践经验谈(转)

2012-04-02 12:57 by Rollen Holt, 2267 阅读, 收藏, 编辑
摘要: 文章的排版不行,大家可以去http://cloud.github.com/downloads/chenshuo/documents/CppPractice.pdf查看原文C++ 工程实践经验谈 by 陈硕 1C++ 工程实践经验谈陈硕 (giantchen@gmail.com)最后更新 2012-4-1版权声明本作品采用“Creative Commons 署名 -非商业性使用 -禁止演绎 3.0 Unported 许可协议 (cc by-nc-nd)”进行许可。http://creativecommons.org/licenses/by-nc-nd/3.0/内容一览1 慎用匿名 namespa 阅读全文

__cdecl __stdcall 解析

2012-03-29 12:20 by Rollen Holt, 361 阅读, 收藏, 编辑
摘要: 1.如果函数func是__cdecl(默认调用方式),调用时情况如下int main(){//参数从右到左压栈 push4 push3 push2 push1 call func add esp0x10//调用者恢复堆栈指针esp,4个参数的大小是0x10(4x4) }2.如果函数func是__stdcall,调用时情况如下int main(){//参数从右到左压栈 push4 push3 push2 push1 call func//恢复堆栈指针由被调用者func负责,方法是"ret 0x10" }3.如果函数func是__pascal,调用情况如下int main(){ 阅读全文

#pragma指令的用法

2012-03-28 19:10 by Rollen Holt, 713 阅读, 收藏, 编辑
摘要: 在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。其格式一般为: #Pragma Para其中Para 为参数,下面来看一些常用的参数。(1)message 参数。 Message 参数是我最喜欢的一个参数,它能够在编译信息输出窗口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为:#Pragma message(“消息文本 阅读全文

Pimpl常用法

2012-03-27 23:30 by Rollen Holt, 424 阅读, 收藏, 编辑
摘要: 对于规模较大的C++项目,头文件的互包含和互依赖关系经常困扰开发者.例如:class foo{public:foo();void method_foo_b(const foo_a& b);private:void method_foo_c(const foo_b& c);private:foo_b b_;foo_c c_;};int main(...){foo fooi;}如果要使得main或者一个必须包含foo的class通过编译,则不仅需要包含foo头文件,还必须包含foo_b, foo_c的头文件.而实际上foo_b, foo_c是foo内部使用的类,完全不需要外部调用着 阅读全文

About Cast in C++(C++中的类型转换)

2012-03-27 23:22 by Rollen Holt, 335 阅读, 收藏, 编辑
摘要: 原文:http://hi.baidu.com/_%E2d_%B7%B3_%DE%B2%C2%D2/blog/item/b46a27d9dc50c0ed39012f8f.htmlC风格(C-style)强制转型如下:(T) exdivssion // cast exdivssion to be of type T函数风格(Function-style)强制转型使用这样的语法:T(exdivssion) // cast exdivssion to be of type T这两种形式之间没有本质上的不同,它纯粹就是一个把括号放在哪的问题。我把这两种形式称为旧风格(old-style)的强制转型。使用 阅读全文

C/C++语言中可变参数的用法

2012-03-27 22:39 by Rollen Holt, 701 阅读, 收藏, 编辑
摘要: 我们在C语言编程中会遇到一些参数个数可变的函数,例如printf()这个函数,它的定义是这样的:int printf( const char* format, ...);它除了有一个参数format固定以外,后面跟的参数的个数和类型是可变的,例如我们可以有以下不同的调用方法:printf("%d",i);printf("%s",s);printf("the number is %d ,string is:%s", i, s);究竟如何写可变参数的C函数以及这些可变参数的函数编译器是如何实现的呢?本文就这个问题进行一些探讨,希望能对大家 阅读全文

如何学好C++语言(转)

2012-03-21 15:39 by Rollen Holt, 375 阅读, 收藏, 编辑
摘要: 原文地址:http://coolshell.cn/articles/4119.html因为之前收藏的地址找不到了,所以重新发一下昨天写了一篇如何学好C语言,就有人回复问我如何学好C++,所以,我把我个人的一些学习经验写在这里,希望对大家有用。首先,因为如何学好C语言中谈到了算法和系统,所以这里就只谈C++语言。C++是最难的语言。这个世界上最难的编程语言可能非C++莫属了。你千万不要以为几天就可以学好C++,C++的学习曲线是相当BT的,你可以看看这篇文章。C++是一门很自由的语言,自由到了有点BT和恐怖的地步。我甚至认为C++并不是一门成熟的编程语言,因为太容易犯错了。所以,你一定要在一开始 阅读全文

在VS2008中使用Qt编程

2011-11-18 10:59 by Rollen Holt, 3081 阅读, 收藏, 编辑
摘要: 原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处、作者信息和本声明。否则将追究法律责任。http://liangbing8612.blog.51cto.com/2633208/471849一、安装所需软件 1. 下载安装VS2008;2.下载qt-win-opensource-4.7.0-vs2008.exe,并安装。这里我们假设安装在C:\Qt4.7.0下; 3.下载qt-vs-addin-1.1.7.exe,并安装。 这三个软件安装好后,在VS的菜单界面上就会出现"QT"选项了。二、环境配置 1. 用VS新建一个win32控制台应用程序,我们假设工程名为:H 阅读全文

可变参数的函数的原理

2011-09-30 14:49 by Rollen Holt, 366 阅读, 收藏, 编辑
摘要: http://blog.csdn.net/zdl1016/article/details/1698629原文地址:可变参数。1:必须有一个提前参数,(即:...之前必须要有一个参数),用以计算出后面的第一个未知参数的地址. 知道了第一个未知参数的地址之后, 就可以根据fmt格式化串,可以依次计算出剩余的参数地址.sprintf()的原型:sprintf(char* buffer,const char* fmt, ... ) ,其中,fmt就是提前参数2:每一个可变阐述函数,其编写者与使用者 都要有一个参数的使用约定。不然,会乱套。3:可变函数实现的技术基础1:所有参数,在汇编级别,其大小都是4 阅读全文

printf-小代码,大问题

2011-09-30 13:51 by Rollen Holt, 370 阅读, 收藏, 编辑
摘要: 各位C、C++开发的朋友们,有没有想过小小的printf也会有陷阱呢?这篇文章,我们就深入来探究一下(代码均在suse10 32位系统下编译测试通过)。废话不多说,直接上代码:12int64_t a = 1;printf("%d\n", a);结果是多少呢?当然是1,你可能会说。我们来看一下结果:1果然是1!但是你会不会以为是 a 首先被自动转化成了 int 类型,然后输入为 1的呢?如果真这么简单,本文到此也该结束了。我们换一个写法:123int64_t a = 1;int b = 2;printf("%d, %d\n", a, b);这次的结果是多少 阅读全文

6个变态的C语言Hello World程序

2011-06-03 21:35 by Rollen Holt, 237 阅读, 收藏, 编辑
摘要: 下面的六个程序片段主要完成这些事情:输出Hello, World 混乱C语言的源代码下面的所有程序都可以在GCC下编译通过,只有最后一个需要动用C++的编译器g++才能编程通过。#define _________ }#define ________ putchar#define _______ main#define _(a) ________(a);#define ______ _______(){#define __ ______ _(0x48)_(0x65)_(0x6C)_(0x6C)#define ___ _(0x6F)_(0x2C)_(0x20)_(0x77)_(0x6F)#defi 阅读全文

Visual C++ 2010新功能之auto关键字

2011-06-03 10:40 by Rollen Holt, 2023 阅读, 收藏, 编辑
摘要: C语言里面其实就已经有auto关键字了,只不过很少用到,当我们在C或者以前的C++中,auto关键字基本上可以被无视:比如这个局部变量: int a = 100; auto int a = 100;并没有什么区别,但是在VC2010中,auto已经有了新的含义,它可以对类型进行推断使得我们在使用的时候可以这样auto a = 100;那么a就是int类型,初始值为100.下面是一个测试程序for VC2010:#include <iostream>#include <string>#include <typeinfo>#include <functio 阅读全文

void (C++)

2011-06-03 10:31 by Rollen Holt, 213 阅读, 收藏, 编辑
摘要: When used as a function return type, thevoidkeyword specifies that the function does not return a value. When used for a function's parameter list, void specifies that the function takes no parameters. When used in the declaration of a pointer, void specifies that the pointer is "universal. 阅读全文