
C++编程
小瑾
这个作者很懒,什么都没留下…
展开
-
C++ thread.join 与 terminate
C++11 std::thread join主要函数注意事项原因解决方案std::thread 是C++11的新特性,对于windows来说,取代了原来的静态方法的创建方式DWORD WINAPI ThreadUtil::ThreadProc(LPVOID lpParameter)主要函数joinable():用于检测线程是否有效。joinable : 代表该线程是可执行线程。not...原创 2020-01-07 11:01:40 · 1725 阅读 · 0 评论 -
C++编程思想——编译与连接
编译与连接原创 2014-11-06 09:14:15 · 641 阅读 · 0 评论 -
C++编程思想——内联
内联内联方法以关键字:inline来标志,其实我们也常常的看到内联的函数,比如在类头文件中定义方法。内联方法的调用与普通方法没有什么不同,但是其性能之间的差别非常的大。下面我们从不同的角度来认识这个内联。1)首先了解普通函数的调用过程:将函数的参数入栈,栈指针指向第一个参数;指令地址入栈,指令指针指向第一条指令;此时在堆栈中将保存方法的栈指针、自变量指针及帧指针,这些都用来原创 2015-03-03 15:42:25 · 564 阅读 · 0 评论 -
C++编程思想——运行时类型识别
运行时类型识别C++中有两种方法可以识别当前运行的类型信息:1、dynamic_cast,记得我们之前多态提及向上类型转换,试图用基类来调用子类的方法,当然了需要虚函数的辅助,其实类型的信息正是虚函数的第一个slot中的内容。使用该关键字实现的称为向下类型转换。 class Security{public: virtual ~Security(){}};class原创 2015-03-08 17:00:05 · 658 阅读 · 0 评论 -
C++编程思想——模板与泛型
模板与泛型一、模板1、在默认的模板参数中,只能够被定义一次,而且它之后的模板参数也必须有默认值,这点与函数有点类似。2、Vector的模板声明为:template > class Vector;,第二个参数代表vector使用的分配器,负责内存的分配、释放、自动回收等。3、Typename可以用于取代class以及声明模板代码内部某个类型。如果没有的话,编译器将会将那个类型看作一个原创 2015-03-08 16:30:07 · 583 阅读 · 0 评论 -
无法打开kernel32.lib
VS2012 无法打开文件“kernel32.lib”问题的解决在编译C++代码时候提示:无法打开kernel32.lib解决办法:添加路径 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin 到项目属性->配置属性->VC++目录->可执行文件目录添加路径 C:\Program F转载 2016-10-21 09:14:00 · 20784 阅读 · 3 评论 -
mongodb C++ driver调用存储过程
mongodb C++driver调用存储过程 虽然存储过程调用要翻译成后台的BSON语句,但是在执行复杂的运算时还是非常有用的,不用将数据库的数据都加载到程序中,尤其是数据量大的时候,从SQL切到mongodb,一时之间还有很多的不透彻之处。存储过程的调用,顾名思义是JS代码的调用,在BSONObjbuilder中的appendCode或者appendCodeWSCope中可原创 2016-05-10 19:18:00 · 398 阅读 · 0 评论 -
STL常见问题
STL常见问题Map 与unordermap如果需要元素内部自动排序,使用map,否则使用unordermap 在实现方式上面,map使用的是红黑树,unordermap使用的是哈希表 在时间复杂度上面 map 插入 O(logn) 查看 O(logn) 删除 O(logn) Unordermap 插入 O(1),最坏为O(n) 查看 O(1),最坏为O...原创 2018-07-09 10:58:32 · 448 阅读 · 0 评论 -
双指针 创建内存
双指针指针的指针,如果利用好指针去创建内存 比如下面的一个例子。通过指针来申请内存。 如果不采用双指针,直接demo*,在传递变量时,会有一个临时变量,叫做_s, 创建内存后,将内存的首地址给了_s.在函数返回时, second_level_pointer依旧是原来的NULL值,不会有任何的改变void malloc_method(demo * second_level_poi...原创 2018-07-10 14:13:18 · 773 阅读 · 0 评论 -
注册表
1.概述是微软的一个数据库,用于存储系统和应用程序的设置信息。参数包括控制windows的启动,硬件驱动及windows应用程序的运行。非常重要,谨慎操作数据结构注册表由键,子键,值项构成。键:分支中的一个文件夹。可以有一个或多个值,每个值名称不相同。子键:文件夹中的子文件夹值:键的当前定义。包括名称、数据类型及分配的值组成。数据类型REG_SZ:字符串 ,文本字符串RE...原创 2018-12-27 14:30:42 · 1429 阅读 · 0 评论 -
VS以管理员权限打开
描述在VS进行debug的时候,会提示使用管理员的权限进行调试。经常出现重新打开程序的问题,所以干脆将VS直接设置为默认管理员的角色运行1. 找到程序目录C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE右击文件devenv.exe2.选择兼容性疑难解答这里可能需要稍微等待一会,出现的...原创 2018-12-27 14:54:59 · 1582 阅读 · 0 评论 -
C++ 多态
多态性最近在找工作,想着做的项目也不少,但是细细的看自己的代码,尽管有面向对象的概念,有一些设计模式,但是依旧很杂,而且使用了也不知道其原理,比如今天同学说咱们共享内存实现的机制是什么,还有堆之类的问题,顿时感觉自己很不足,于是静下心来好好的研究一下C++中的多态。如果C++中的代码没有使用多态,那么就是过程化,或者简单的只是将数据与函数的结合,这就根本没有使用到C++的优势。不过话说回来原创 2014-10-11 22:20:44 · 747 阅读 · 0 评论 -
C/C++中的memcpy
这个函数的用法还是比较简单的,只是经常忘记,所以就记下来吧。1. 所需头文件 2. 函数原型[cpp] view plaincopyprint?void * memcpy ( void * destination, const void * source, size_t num ); (转载 2014-03-04 17:08:09 · 746 阅读 · 0 评论 -
C++编程思想--继承与组合
继承与组合1、组合:新类中创建已存在类的对象,由此类中会包含已存在类对象,此种方式为组合。在构造函数的调用的过程中要注意的是首先会调用基类的构造函数,然后调用子对象的构造函数,子对象构造函数的调用顺序是根据其定义的顺序而定的。为什么在构造函数中初始化子对象以及基类对象的对象你哦?这是C++的一个强化机制,确保在构造当前对象的时候就已经调用了基类的构造函数。2、名字隐藏:任何时候重新原创 2013-09-27 21:54:10 · 729 阅读 · 0 评论 -
C++编程思想--命名空间、头文件、库
头文件 库 命名空间头文件:是一个含有某个库的外部声明函数和变量的文件。大部分的库包含众多的函数和变量,为了减少工作量,当对这些函数和变量做外部声明是,使用头文件。1)在头文件中进行声明:向编译器介绍名字--标识符。定义:定义要为名字分配存储空间,无论是定义函数还是变量,编译器为变量在内存中开辟空间来保存变量的数据,函数,编译器会生成代码。这些代码最终也要占用一定内存2)头文件是存原创 2013-03-11 15:57:47 · 1159 阅读 · 0 评论 -
C++编程思想--隐藏实现
访问修饰符先从结构体进入类,首先我们来介绍数据类型。1)内部数据类型:是编译器本来能理解的数据类型,直接与编译器关联。那么基本的数据类型包括:int,float,double,char,bool。2)自定义的数据类型一般称为抽象数据类型。编译器启动时,知道怎样处理内部数据类型,在通过包含类声明的头文件认识怎样处理抽象数据类型。Typedef命名别名Typedef表示类型定义原创 2013-03-12 20:24:46 · 961 阅读 · 0 评论 -
C++编程思想--初始化与清除
初始化与清除安全性包括初始化与清除。其实就是构造函数与析构函数的作用。对于一个库的struct来说必要的清除工作容易遗忘。初始化和清除的概念是简化库的关键。减少客户程序员去为完成这些操作引起的细微错误。比如说内存忘记释放等等。1)如何进行初始化:使用构造函数保证每个对象被初始化,编译器在创建函数自动调用构造函数,在使用对象之前完成。它指定对象如何创建或者设定对象的初始值,构造函数的参数保证原创 2013-03-14 20:41:57 · 766 阅读 · 0 评论 -
C++编程思想--动态对象的创建(1)
动态对象创建1、为什么不使用C中的函数:运行时可以创建和销毁对象,于是C中提供了动态内存分配,它们在运行时从堆中分配储存单元。Eg:malloc、free。以及他们的变体(1). 但是在C++中因为构造函数不允许我们向它传递地址来进行初始化。若可以的话,很可能在对对象进行初始化之前意外地对对象进行了某种操作。(2). Malloc.free是库函数,不在编译器的控制范围之内:它不是运算原创 2013-03-16 13:39:51 · 752 阅读 · 0 评论 -
C++编程思想--动态创建对象(2)
动态创建对象(2) 5)重载new 与delete,首先为什么需要重载new与delete呢?① 也许要创建和销毁一个类的非常多的对象,以至于这个影响到了速度。② 分配不同大小的内存可能会产生碎片,内存很快就被分配完所以重载的时候我们只是改变了原来的分配方法,当重载时可以替换原来内存消耗完之后的行为。所以在operator new 中要决定是返回0,还是调用new-hande原创 2013-03-16 15:13:58 · 800 阅读 · 0 评论 -
c++编程思想--const常量
const 常量一、值替代1、预处理器:预处理器可以不受限制使用宏并用它来代替值。但是预处理器制作文本替换,没有类型检查。2、Define定义只是在与处理期间存在,并不占用存储空间,它的工作方式与普通常量类似。利用const则在编译时就可以通过必要的计算把一个复杂的常量表达式通过缩减简单化。3、Const C++中的const是默认为内部连接的,也就是说仅在被定义过的文件里才是可见原创 2013-03-17 21:35:41 · 822 阅读 · 0 评论 -
生成解决方案与重新生成解决方案
生成解决方案与重新生成解决方案生成解决方案:在一个项目中,当对文件进行编译的时候,使用生成解决方案会尝试优化整个过程,根据修改的日期,编译修改过的文件重新生成解决方案:首先删除一些中间文件,然后重新生成。但是使用生成不一定是工程编译想要的顺序,有库连接时可能会报错,清理解决方案:将删除所有中间文件(.pdb等类型)和输出文件,只留下项目文件和组成文件。出现或上一个增量链接没有生成它转载 2013-05-29 21:21:30 · 4617 阅读 · 0 评论 -
C++编程思想--函数重载和默认参数
第7章 函数重载与默认参数一、何谓函数重载函数重载中,可以通过调用同一个函数名字达到不同的功能,但是传入的值类型或许不同。于是在C++中设置其为函数重载。1、那么编译器是如何区分不同的参数类型的呢。编译器中采用名字修饰的概念,用不同的参数类型修饰不同的函数名,对于同一个print函数来将,就会产生_print_char和_print_int的内部名字。但是这种名字修饰是没有统一的标准的原创 2013-07-31 14:48:53 · 996 阅读 · 0 评论 -
C++编程思想--运算符重载
运算符重载 看完这一章再结合前面看的拷贝构造函数方才好好的了解了对象中=复制与拷贝之间的区别。主要介绍的有几点:1、介绍可重载的运算符,2、重载中的参数的修饰以及返回值、使用成员函数还是全局3、自动类型转换 一、运算符与普通函数调用的不同之处:1、调用运算符的时候要将运算符放在函数之间,2、是由编译器决定调用哪一个函数的。这个怎么说呢。编译器会对参数进行转换之类的。原创 2013-07-31 16:10:19 · 639 阅读 · 0 评论 -
C++编程思想--拷贝构造函数
拷贝构造函数1. 引用就像能自动地被编译器间接引用的常量型指针。通常用于函数的参数表和函数的返回值,但也可以独立使用。引用规则:1)引用被创建的时候必须初始化2)引用被初始化为一个对象的引用就不能改变为另一个对象的引用3)不能有NULL引用。2. 函数中的引用1、引用作为函数的参数时,在函数内做的修改会影响外面的参数。必须确保返回的指针,引用的内存是存在的。原创 2013-07-25 13:04:35 · 752 阅读 · 0 评论 -
C++编程思想--编译与解释
编译与解释定义:从人们容易理解的形式转化为计算机能执行的形式(机器指令)。翻译器分为:解释器与编译器。1、解释器:将源代码转化成一些动作并立即执行。不产生目标程序,根据当前的机器处理器芯片,边解释边执行。优点:速度快。从写代码到执行代码几乎能立即完成。但是依旧有局限性。解释器必须贮存在内存中以执行程序,如此空内存空间限制。1)解释程序适合程序员交互方式的工作情况,即希望在获取下一个语句原创 2013-03-11 14:22:23 · 901 阅读 · 0 评论