C++ 拾遗
ice_ly000
这个作者很懒,什么都没留下…
展开
-
_cdecl、_stdcall、_fastcall函数调用约定区别
1. 函数调用过程在C语言中,假设我们有这样的一个函数:int function(int a,int b);调用时只要用result = function(1,2)这样的方式就可以使用这个函数。但是,当高级语言被编译成计算机可以识别的机器码时,有一个问题就凸现出来:在CPU中,计算机没有办法知道一个函数调用需要多少个、什么样的参数,也没有硬件可以保存这些参数。也就是说,计算机不知道怎么给这个函数传递参数,传递参数的工作必须由函数调用者和函数本身来协调。为此,计算机提供了一种被称为栈的数据结构来支持参原创 2020-08-12 19:01:59 · 652 阅读 · 0 评论 -
【转-悬空指针,野指针】野(wild)指针与悬空(dangling)指针
野(wild)指针与悬空(dangling)指针1. 什么是野指针(wild pointer)?A pointer in c which has not been initialized is known as wild pointer.野指针(wild pointer)就是没有被初始化过的指针。例如,1 int main(int argc, char *argv[])2 {...转载 2019-05-23 12:48:25 · 656 阅读 · 0 评论 -
C++中的函数重载、重写、重定义
C++继承中重载、重写、重定义的区别:重载overload:是函数名相同,参数列表不同 重载只是在类的内部存在。但是不能靠返回类型来判断。重写override:也叫做覆盖。子类重新定义父类中有相同名称和参数的虚函数。函数特征相同。但是具体实现不同,主要是在继承关系中出现的 。重写需要注意:1 被重写的函数不能是static的。必须是virtual的2 重写函数必须有相同的类型,名称和参数列表3 重...转载 2018-06-01 15:15:08 · 368 阅读 · 0 评论 -
C++ 声明和定义(一)
·变量定义:用于为变量分配存储空间,还可为变量指定初始值。程序中,变量有且仅有一个定义。·变量声明:用于向程序表明变量的类型和名字。·定义也是声明:当定义变量时我们声明了它的类型和名字。·extern关键字:通过使用extern关键字声明变量名而不定义它。1.定义也是声明,extern声明不是定义,即不分配存储空间。extern告诉编译器变量在其他地方定义了。1 extern int i; //声...转载 2018-06-01 14:50:22 · 1182 阅读 · 0 评论 -
C++单例模式 正确的资源回收方式
C++的懒汉和饿汉实现模式:点击打开链接关于C++单例模式下m_pinstance指向空间销毁问题,m_pInstance的手动销毁经常是一个头痛的问题,内存和资源泄露也是屡见不鲜,能否有一个方法,让实例自动释放。解决方法就是定义一个内部垃圾回收类,并且在Singleton中定义一个此类的静态成员。程序结束时,系统会自动析构此静态成员,此时,在此类的析构函数中析构Singleton实例,就可以实现...原创 2018-06-01 14:36:00 · 1040 阅读 · 1 评论 -
C++安全的单例模式(懒汉和饿汉模式)
1 教科书里的单例模式 我们都很清楚一个简单的单例模式该怎样去实现:构造函数声明为private或protect防止被外部函数实例化,内部保存一个private static的类指针保存唯一的实例,实例的动作由一个public的类方法代劳,该方法也返回单例类唯一的实例。12345678910111213141516class singleton{protected: singleton()...转载 2018-06-01 14:32:39 · 598 阅读 · 0 评论 -
C/C++ extern关键字
1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而不是...原创 2018-06-01 14:29:01 · 157 阅读 · 0 评论 -
C++ enum关键字
内容取自<<C++ primer plus>>枚举量的声明和定义(1)首先,请看下面的语句:enum enumType {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday};这句话有两个作用:第一:声明enumType为新的数据类型,称为枚举(enumeration);第二:声明Monday、Tue...原创 2018-06-13 19:14:01 · 810 阅读 · 0 评论 -
C++ 关于回车和换行
回车(Carriage Return, CR)和换行(Line Feed, LF),在一起称之为CRLF,这两个是不同的操作,在C++中回车符是"\r",换行符是"\n".1. 关于“回车”(carriage return)和“换行”(line feed)这两个概念的来历和区别。在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是...原创 2018-06-06 17:28:01 · 15734 阅读 · 0 评论 -
C++ sizeof关键字
一 定义: sizeof是C/C++中的一个操作符(operator),而非函数,简单的说其作用就是返回一个对象或者类型所占的内存字节数。MSDN上的解释为:The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggreg...原创 2018-06-05 21:19:14 · 258 阅读 · 0 评论 -
Windows上的C/C++库以及VS中运行库MT,MTd,MD,MDd的含义
在使用VC构建项目时,经常会遇到下面的链接错误: 初学者面对这些错误常常不知所错:libcmt.lib是什么东西?msvcrtd.dll又是干吗用的?在使用VC++时我们也常常对下面的运行库配置项感到疑惑,它们到底究竟是什么意思呢?甚至一些工作了很多年的程序员也对此一知半解。今天让我们来了解一下它们。 从C和C++运行库说起 为了提高C语言的开发效率...原创 2018-05-23 23:29:13 · 1366 阅读 · 0 评论 -
DLL动态库与静态库Lib的区别
之前一直有些疑问,看了这篇文章,思路清晰多了,特转载如下:(打算这个周末2018年5月26日,从头至尾实现并加上自己的感悟,写一篇原创的文章出来)原文链接:点击打开链接以下以vs2013开发环境做出演示:一、动态链接库的创建和引用首先在vs2013中创建一个空的DLL1项目,添加DLL1.h与DLL.cpp 头文件DLL1.h内容如下: #ifndef DLL1_H #define ...转载 2018-05-23 23:23:32 · 2058 阅读 · 0 评论 -
C++ char类型的见解
今日回顾<<C++Primer plus>>一书,增强了一个观念,那就是char类型本质是整型,整型,整型!!!千万不要被char这个英文单词所干扰,虽然char类型就是专门为存储字符而设计的!!! 看下面这个测试代码与结果: 我们会有疑问,char明显被显示成字符了,char存储的就是字符啊~~可实质上,显示为M这个字符,并非是...原创 2018-06-03 16:15:29 · 5468 阅读 · 0 评论 -
C++ 声明和定义(二)
在不同的时段看同样的书籍会有不同的感受,思维层次不一样。并且有些你可能很肯定的东西,形成思维定式的东西,当你遇到不同见解的时候,千万别急着下结论,认为你掌握的肯定就是对的。之前你很可能对某些东西理解未透彻或者忽略掉了一些事实,举个简单的例子:对表达式sizeof(int)求值得到4,也就是说int占4个字节,那么int占32bits。这样一定是对着的吗?答案是不一定,int确实占4字...原创 2018-06-03 00:23:40 · 546 阅读 · 0 评论