C/C++
文章平均质量分 59
sheltonwan
码农
展开
-
引用
2. 什么是“引用”?申明和使用“引用”要注意哪些问题?答:引用就是某个目标变量的“别名”(alias),对应用的操作与对变量直接操作效果完全相同。申明一个引用的时候,切记要对其进行初始化。引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,不能再把该引用名作为其他变量名的别名。声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此原创 2008-05-16 22:07:00 · 633 阅读 · 0 评论 -
虚函数工作原理
<br />C++规定了虚函数的行为,但将实现方法留给了编译器作者。不需要知道实现方法就可以使用虚函数,但了解需函数的工作原理有助于更好的理解概念,因此,这里对其进行介绍。 通常,编译器处理虚函数的方法是:给每个对象添加一个隐藏成员。隐藏成员中保存一个指向函数地址数组的指针。这种数组称为虚函数表(virtual function table, vtbl)。虚函数表中存储了为对象进行声明的虚函数的地址。例如,基类对象包含一个指针,该指针指向基类中所有虚函数的地址表。派生类对象包含一个指向独立地址表的指针。如转载 2010-10-12 15:17:00 · 4234 阅读 · 0 评论 -
深入探讨C++中的引用
<br />http://wenku.baidu.com/view/31ce44dc5022aaea998f0f7b.html原创 2010-08-25 10:10:00 · 453 阅读 · 0 评论 -
win32程序启动过程
<br />在现代操作系统中,计算机应用程序以文件形式(可执行文件、动态库文件、配置文件和其他文件等)保存在磁盘中。所谓“程序启动过程”,指从用户发出请求执行程序,到该应用程序完全启动(例如程序界面完全显示,准备响应用户的输入)这个过程。从系统分工的角度来看,程序启动过程包括两个阶段:<br />(1) 操作系统负责把程序从磁盘读入内存并且建立相应得运行环境<br />(2) 应用程序自身的初始化过程。<br />编译连接过程:<br />1、预编译展开一些宏<br />2、为每一个转载 2010-08-25 09:48:00 · 2129 阅读 · 0 评论 -
内存碎片
<br />内存碎片是个非常棘手的问题。怎么分配内存决定着内存碎片是否会、何时会、怎么会成为一个问题。<br /> 即使在系统中事实上仍然有许多空闲内存时,内存碎片还会最终导致出现内存用完的 <br /> <br /> <br />情况。一个不断产生内存碎片的系统,不管产生的内存碎片多么小,只要时间足够长,就会将内存用完。这种情况在许多嵌入式系统中,特别是在高可用性系统中是不可接受的。有些软件环境,如 OSE 实时操作系统已备有避免内存碎片的良好工具,但个别程式员做出的选择仍然会对最终转载 2010-08-21 12:44:00 · 6398 阅读 · 1 评论 -
C++异常和Windows结构异常的比较
Windows结构异常有如下几个特性: 1、它使用__try、__except、__finally和__leave关键字和RaiseException API; 2、它由Windows所支持,因此它不适合其它操作系统 3、它不处理C++对象的解析 说明:在使用Windows结构异常的函数内,如果有C++对象,编译器会发 出:error C2712: Cannot use __try in functions that require object unwinding 的错误。 如: void fun( )<转载 2010-08-14 12:23:00 · 827 阅读 · 0 评论 -
CoinitializeEx Remarks
对于每个使用com库的线程,CoInitializeEx 至少必须调用一次, 通常也只调用一次。只要传递相同的并发标志参数,同一个线程多次调用CoInitializeEx也是允许的, 但是后面的有效调用返回S_FLASE。 要在一个线程上合理关闭com库,每一次成功调用CoInitialize 或者CoInitializeEx (包括任何返回S_FALSE的调用),都必须对应调用一次CoUnini翻译 2010-05-03 13:51:00 · 4326 阅读 · 0 评论 -
基础
今天发现在头文件添加一个非const数组的时候会重定义的连接错误。原创 2009-07-10 10:06:00 · 510 阅读 · 0 评论 -
容器类作为全局成员不妥
今天使用vector容器类对象作为全局对象,无意中发现内存泄露,经过艰苦调试,发现只要我push_back()一个指针进去,它就会泄露4个字节的内存,即使是空指针,它也会泄露4个字节的内存。最后将vector容器类对象作为类成员,复制原来的代码到类中,最后就没有内存泄露。不知甚解,但是最终知道容器类作为全局成员不妥。后来我重新构建个简单的全局对象,又不存在这样的问题,不知道怎么回事?原创 2009-01-10 14:44:00 · 1203 阅读 · 1 评论 -
结构化异常处理和C++的异常处理区别
Windows异常由系统内核代码捕获,然后传递至用户层,多用于非法内存访问、指令错误等,其类型是CPU定义的,参见《X386保护模式编程》。 C++异常是C++编译器生成的结构(多在堆栈上),是普通的用户层代码,异常类型由用户自定义。 由于Windows异常处理和C++异常处理均使用堆栈展开,在局部堆栈的使用中存在冲突,一般不能混用。 __try{} __finally{}不会检查类内析构以及构造原创 2008-09-28 17:54:00 · 3130 阅读 · 0 评论 -
如何从c++中调用c#的com组件
开发环境VS2005 1、 首先创建一个c#的类库项目。2、 将AssemblyInfo.cs文件中的[assembly: ComVisible(false)]改为[assembly: ComVisible(true)],或者在项目属性中“应用程序”构选上“使程序集com可见”复选框。3、 在项目属性中”生成”构选上”为com interop注册”复选框。4、 参考以下原创 2008-09-25 17:27:00 · 1367 阅读 · 1 评论 -
用c++实现com组件示例
1、 创建一个win32 dll应用类型项目工程。2、 添加ComTest.h及ComTest.cpp文件,并在ComTest.h头文件包含Unknwn.h头文件3、 用guid.exe生成一个接口IID及com对象类CLSID代码如下://ComTest.h#pragma once #include EXTERN_C const CLSID CL原创 2008-09-27 16:35:00 · 6539 阅读 · 3 评论 -
如何使用WinINet接口实现Youtube用户名密码认证
#include "stdafx.h"#include #include #include #include #include using namespace std;#pragma comment( lib, "Wininet.lib" ) LPCTSTR lpszAcceptType = L"Accept: text/*";CHAR g_szAuth[1024];TCHAR g_szYou原创 2008-09-19 18:38:00 · 2133 阅读 · 1 评论 -
关于C++中的类型转换
仔细想想地位卑贱的类型转换功能(cast),其在程序设计中的地位就象goto语句一样令人鄙视。但是它还不是无法令人忍受,因为当在某些紧要的关头,类型转换还是必需的,这时它是一个必需品。 不过C风格的类型转换并不代表所有的类型转换功能。 一来它们过于粗鲁,能允许你在任何类型之间进行转换。不过如果要进行更精确的类型转换,这会是一个优点。在这些类型转换中存在着巨大的不同,例如把一个指向转载 2008-05-17 18:52:00 · 643 阅读 · 0 评论 -
在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?
首先,作为extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。例如,如果模块B欲引用该模块A中定义的全局变量和函数时只需包含模块A的头文件即可。这样,模块B中调用模块A中的函数时,在编译阶段,模块B虽然找不到该函数,但原创 2008-05-16 23:10:00 · 778 阅读 · 0 评论 -
C /C 笔试题-C/C 笔试、面试题目大汇总
1.求下面函数的返回值(微软)int func(x) { int countx = 0; while(x) { countx ++; x = x&(x-1); } return countx; } 假定x = 9999。 答案:8思路:将x转化为2进制,看含有的1的个数。2. 什么是“引用”?申明和使用“引用”要注意哪些问题?转载 2008-05-17 18:45:00 · 933 阅读 · 0 评论 -
指针与引用的区别
<br /> 指针与引用看上去完全不同(指针用操作符“*”和“->”,引用使用操作符“. ”),但是它们似乎有相同的功能。指针与引用都是让你间接引用其他对象。你如何决定在什么时候使用指针,在什么时候使用引用呢?<br />首先,要认识到在任何情况下都不能使用指向空值的引用。一个引用必须总是指向某些对象。因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因为这样你可以赋空值给该变量。相反,如果变量肯定指向一个对象,例如你的设计不允许转载 2010-10-12 14:55:00 · 634 阅读 · 0 评论