C/C++
文章平均质量分 88
leehong2005
这个作者很懒,什么都没留下…
展开
-
C++编译器与链接器工作原理
这里并没不是讨论大学课程中所学的《编译原理》,只是写一些我自己对C++编译器及链接器的工作原理的理解和看法吧,以我的水平,还达不到讲解编译原理(这个很复杂,大学时几乎没学明白)。 要明白的几个概念: 1、编译:编译器对源文件进行编译,就是把源文件中的文本形式存在的源代码翻译成机器语言形式的目标文件的过程,在这个过程中,编译器会进行一系列的语法检查。如果编译通过,原创 2012-03-03 18:07:31 · 1147 阅读 · 0 评论 -
String类的包装 ---- 类声明
这是我用C++语言实现的一个String类,类的声明如下:目前还没有重载 + 操作符,有时间把这个也实现。 说明:CPP中实现有些用到库函数,我这里没有表出所引用的头文件。因此直接拷贝可能会导致编译错误。// SdkString.hclass SdkString{public: // 构造函数 SdkString();原创 2013-02-24 22:12:35 · 1073 阅读 · 0 评论 -
_stdcall与_cdecl区别
前段时间编程时遇到过这么一个问题,我写了一个DLL,把里面的一个函数导出来,然后再定义一个签名与其匹配的函数指针,动态地把这个DLL加载起来(LoadLibrary),得到函数指针后,一调用,结果报错了,错误如下:Run-Time Check Failure #0 - The value of ESP was not properly saved across a function cal原创 2013-02-24 21:25:37 · 35581 阅读 · 6 评论 -
C++ POD与结构体声明
请看下面这个结构体定义:struct MyStruct { int i; wstring str; vector strs; };上面的结构休定义有问题吗?理论上说没有,但在某些情况下就有问题了。如下用法:MyStruct *pMy = new MyStruct(); memset(pMy, 0, sizeof(M原创 2013-02-22 13:30:49 · 3664 阅读 · 0 评论 -
_beginthreadex与CreateThread区别与联系
关于这两个函数的区别,可以参考《Windows 核心编程(第五版)》的第六章 "线程基础",这篇文章的思想多数来源于此,我只是作了一些整理。线程对于初学者还说可能觉得很高深,这可以理解。对于某些有经验的程序员来说,可能觉得又太简单,我觉得如果认为线程很简单的人,都是没有理解线程,线程里面涉及的东西太多,包括内存,初始化,线程同步等。我打算以QA的形式来写这篇文章。Q:为原创 2013-02-22 13:25:49 · 2015 阅读 · 0 评论 -
C++ 类型转换(Casting Operators)
在C++中,经常会涉及到类型转换,虽说一般情况下不建议类型转换,但有时候还是避免不了。转换的时候,可能一般都直接使用C语言风格的转换(直接强制转换),但这样做可能很不安全,容易造成数据丢失(如int -> char),内存访问违规。 下面讲一讲C++的几个转换操作符,常见的有这么几个:static_cast, dynamic_cast, const_cast, reinterpret原创 2013-02-22 12:41:42 · 1632 阅读 · 0 评论 -
C++模板的编译问题
对于模板,包括模板类与模板函数,它们的代码其实并不是直接翻译成二进制代码,它要求有一个“具体化”的过程,举个例子:template void FunA(T t){} int main(){ FunA(10); // call FunA(int) 编译器在这里决定给FunA一个FunA(int)的具体实现体。} 也就是说,如果在main函数中,没有调原创 2013-02-22 12:35:32 · 2121 阅读 · 0 评论 -
托管C++函数定义输出参数(ref)
有时候我们为了调用系统底层的API,为UI(C#)提供服务,那么要以把这些方法放在托管工程中(CLR),这样既可以调用API,又可以供.NET上层使用,这的确是一个很好的方法,CLR工程就像是一个桥梁,连接C++与.NET?但有时候会有这么一个问题:在托管工程中的方法,如何声明输出参数?举个例子:有这样一个函数:GetTimeStampFormat_r(UINT &Fo原创 2013-02-22 13:35:29 · 6759 阅读 · 2 评论 -
C++总结
1、对构造函数声明explicit会让编译器防止隐式转换class A{public: A(int i) : mi(i) { printf("A constructor."); } ~A() { printf("A destructor.\n"); } A (const A& src) { mi = src.mi; prin原创 2013-02-22 12:38:09 · 783 阅读 · 0 评论 -
C/C++位运算
这篇文章是转载的,我觉得写得很详细,讲得很明白,所以就转载了,原文地址 http://blog.csdn.net/masefee/archive/2010/01/26/5258432.aspx回顾之前的篇幅,C语言的主体部分基本已经介绍完了。之所以没有介绍C++的相关特性是因为在之前的文章中C和C++在这些方面都有共性,所以在面向对象之前。我们先把这些共性给介绍完。也就是说在介绍面转载 2012-03-08 23:19:45 · 1246 阅读 · 0 评论 -
String类的包装 ---- 类实现
接上一篇《String类的包装 ---- 类声明》这是SdkString类的方法实现,每个方法都经过我测试,应该没有问题。如果大家发现有写得效率不高或者BUG的地方,可以进行回贴指出。// SdkString.cpp#ifndef SAFE_DELETE_ARRAY#define SAFE_DELETE_ARRAY(p) { if ((p) != NU原创 2013-02-24 22:13:56 · 2522 阅读 · 0 评论