随笔分类 - c++
摘要:今天刚开始调试windows核心编程中的例程就感觉十分难懂,原因是自己的c++基本功力实在太弱了 首先在windows编程的过程中大量的使用宏的问题。 #pragma 的用法 在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C ++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。其格式一般为: #Pragma Para其中Para 为参数,下面来看一些常用的参数。(1)message 参数。
阅读全文
摘要:1、系统和网络编程库:ACE 除了ACE之外,还有很多系统和网络编程方面的程序库。比如在线程库方面,还有ZThread、boost::thread,如果放大到C/C++领域,还有APR,还有CII。在文件和目录操作方面,boost也有相应的组件,而在网络编程方面有socket++,还有boost::asio,未来的C++0X中几乎肯定有一个网络编程和一个线程库。然而目前看来,ACE仍然是进行系统和高性能网络编程的首选,其地位在一段时间内不会被撼动。它不但是一个实用的程序库、框架集,还是一个典范的设计模式应用范例,非常值得学习。2、GUI库:Qt 传统上Qt被认为是可移植的GUI库,但实际上Qt
阅读全文
摘要:指针与引用看上去完全不同(指针用操作符“*”和“-”,引用使用操作符“. ”),但是它们似乎有相同的功能。指针与引用都是让你间接引用其他对象。你如何决定在什么时候使用指针,在什么时候使用引用呢?首先,要认识到在任何情况下都不能使用指向空值的引用。一个引用必须总是指向某些对象。因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因为这样你可以赋空值给该变量。相反,如果变量肯定指向一个对象,例如你的设计不允许变量为空,这时你就可以把变量声明为引用。“但是,请等一下”,你怀疑地问,“这样的代码会产生什么样的后果?”char *pc = 0
阅读全文
摘要:Debug通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。Debug 和 Release 的真正秘密,在于一组编译选项。下面列出了分别针对二者的选项(当然除此之外还有其他一些,如/Fd /Fo,但区别并不重要,通常他们也不会引起 Release 版错误,在此不讨论)Debug 版本参数 含义 /MDd /MLd 或 /MTd 使用 Debug runtime library (调试版本的运行时刻函数库) /Od 关闭优化开关 /D "_DEBUG" 相当于
阅读全文
摘要:1、Java Java编程语言(第三版)---Java四大名著----James Gosling(Java之父)Java编程思想(第2版)----Java四大名著----Bruce EckelJava编程思想(第3版)----Java四大名著----------------Bruce EckelJAVA 2核心技术 卷I:基础知识(原书第7版)---Java四大名著-----Cay HorstmannJAVA 2核心技术 卷II:高级特性(原书第7版)----Java四大名著-----Cay HorstmannEffective Java中文版------Java四大名著--------Jos
阅读全文
摘要:程序文档,曾经是程序员的一个头痛问题。写一个程序文档,比较花时间,但不是很难;麻烦的是当程序修改后,程序文档也要跟着同步更新,否则文档和程序就要脱节,文档也就变成没用的东西了。好在有许多好用的文档生成器来解决这个问题。目前比较流行的C++文档生成器是doxygen。本文就简单的介绍一下doxygen的文档注释方法,以供初学者参考:C++ 程序文档生成器介绍(doxygen)沐枫网志1.模块定义(单独显示一页)/**@defgroup模块名模块的说明文字*@{*/... 定义的内容 .../**@}*/ // 模块结尾2.分组定义(在一页内分组显示)/**@name分组说明文字*@{*/...
阅读全文
摘要:LeakDiag是一个监测内存泄漏的工具,可以用来精确地找到内存泄露一直到代码行。它使用微软的Detours 技术,拦截指定内存分配的调用并跟踪各种调用栈,并报告已分配但尚未释放的内存,这一信息允许让我们在排除一个内存泄露问题时,能精确查看哪些组件进行了该分配。使用正确的调试符号,我们甚至可以看见请求分配的代码行。关于detours: http://research.microsoft.com/e...
阅读全文
摘要:问题描述:一直以来,引擎都运行的很稳定。而且在所有电脑上都很稳定。但是,唯独一个笔记本不行。引擎在其上一运行就崩掉。问题分析:根据生成的dump文件,windbg的分析结果为:The stored exception information can be accessed via .ecxr.(c98.da0): Stack buffer overflow - code c0000409 (fir...
阅读全文
摘要:C++标准库中的<sstream>提供了比ANSI C的<stdio.h>更高级的一些功能,即单纯性、类型安全和可扩展性。在本文中,我将展示怎样使用这些库来实现安全和自动的类型转换。为什么要学习如果你已习惯了<stdio.h>风格的转换,也许你首先会问:为什么要花额外的精力来学习基于<sstream>的类型转换呢?也许对下面一个简单的例子的回顾能够说...
阅读全文
摘要:C++引入了ostringstream、istringstream、stringstream这三个类,要使用他们创建对象就必须包含sstream.h头文件。 istringstream类用于执行C++风格的串流的输入操作。ostringstream类用于执行C风格的串流的输出操作。strstream类同时可以支持C风格的串流的输入输出操作。 istringstream类是从istream和s...
阅读全文
摘要:在编程的过程中,文件的操作是一个经常用到的问题,在C++Builder中,可以使用多种方法对文件操作,下面我就按以下几个部分对此作详细介绍,就是: 1、基于C的文件操作;2、基于C++的文件操作;3、基于WINAPI的文件操作;4、基于BCB库的文件操作;5、特殊文件的操作。 壹、基于C的文件操作 在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别介绍之。一...
阅读全文
摘要:for_each函数原形template<class _InIt, class _Fn1> inline _Fn1 for_each(_InIt _First, _InIt _Last, _Fn1 _Func) { // perform function for each element for (; _ChkFirst != _ChkLast; ++_ChkFirst) _Func(...
阅读全文
摘要:我有一个很熟的朋友,他现在忙的不可开交。他手上有一大堆没有完成的合同,而且一个跟他一起开发的助手也离他而去。于是,在三个大客户的催命鬼时的督促下,他已经连续好几个星期没休息了。 其中有个客户跟他讨论他给这个客户做的iPad应用程序,客户告诉他“我们花钱雇了另外一个程序员来审查你的代码,他说你的代码写的很烂。”当他告诉我这个故事时,我只是微微一笑,想起了我以前是怎么唾弃别人的...
阅读全文
摘要:c语言中,什么都是通过传值来实现的,c++继承了这一传统并将它作为默认方式。除非明确指定,函数的形参总是通过“实参的拷贝”来初始化的,函数的调用者得到的也是函数返回值的拷贝。正如我在本书的导言中所指出的,“通过值来传递一个对象”的具体含义是由这个对象的类的拷贝构造函数定义的。这使得传值成为一种非常昂贵的操作。例如,看下面这个(只是假想的)类的结构:代...
阅读全文
摘要:list::splice实现list拼接的功能。将源list的内容部分或全部元素删除,拼插入到目的list。函数有以下三种声明:void splice ( iterator position, list<T,Allocator>& x ); // void splice ( iterator position, list<T,Allocator>& x, i...
阅读全文
摘要:条款45说明了如果没写赋值运算符的话,编译器就会为你生成一个,条款11则说明了为什么你会经常不喜欢编译器为你生成的这个赋值运算符,所以你会想能否有个两全其美的办法,让编译器生成一个缺省的赋值运算符,然后可以有选择地重写不喜欢的部分。这是不可能的!只要想对赋值过程的某一个部分进行控制,就必须负责做赋值过程中所有的事。实际编程中,这意味着写赋值运算符时,必须对对象的每一个数据成员赋值:代码Code h...
阅读全文
摘要:有时,一个类想跟踪它有多少个对象存在。一个简单的方法是创建一个静态类成员来统计对象的个数。这个成员被初始化为0,在构造函数里加1,析构函数里减1。(条款m26里说明了如何把这种方法封装起来以便很容易地添加到任何类中,“my article on counting objects”提供了对这个技术的另外一些改进)设想在一个军事应用程序里,有一个表示敌人目标的类:代码Code ...
阅读全文
摘要:顽固的pascal和ada程序员会经常想念那种可以任意设定数组下标上下限的功能,即,数组下标的范围可以设为10到20,不一定要是0到10。资深的c程序员会坚持一定要从0开始计数,但想个办法来满足那些还在用begin/end的人的这个要求也很容易,这只需要定义一个自己的array类模板:代码Code highlighting produced by Actipro CodeHighlighter (...
阅读全文
摘要:看这样一个模板,它生成的类使得一个名字和一个t类型的对象的指针关联起来。[代码](因为有指针成员的对象在进行拷贝和赋值操作时可能会引起指针混乱(见条款11),namedptr也必须实现这些函数(见条款2))在写namedptr构造函数时,必须将参数值传给相应的数据成员。有两种方法来实现。第一种方法是使用成员初始化列表:[代码]第二种方法是在构造函数体内赋值:[代码]两种方法有重大的不同。从纯实际应...
阅读全文
摘要:看下面一个表示string对象的类:// 一个很简单的string类代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--classstring{public: string(constchar*value); ~string();...//没有拷...
阅读全文

浙公网安备 33010602011771号