自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(195)
  • 资源 (21)
  • 收藏
  • 关注

原创 C++运行时

C++当涉及到多态时,具有虚函数的子类就具有了

2015-07-30 11:09:27 3751

转载 Awesome C/C++ (了不起的C/C++)

本文来自点击打开链接A curated list of awesome C/C++ frameworks, libraries, resources, and shiny things. Inspired by awesome-... stuff.Awesome C/C++Standard LibrariesFrameworksArtificial Intelligen

2015-07-28 20:04:52 12653

原创 Code Blocks 配置 MinGW Distro 使用boost库

mingw的编译发行版常见的有两个: MinGW Distro 和 TMD-GCC.  MinGW Distro中更是包含了boost库,不用我们再编译,而且都是最新的库,非常方便。可以去这里下载点击打开链接,下载最新版 mingw-13.0.exe,将Code Blocks 的安装目录下的MinGW下的文件全部删除,之后将下载的文件双击, 提取到MinGW文件夹下。之后启动Cod

2015-07-25 01:32:37 3541

原创 C++可调用对象适配器和绑定器

C98/03中的仿函数适配器bind1st(),bind2nd(),ptr_fun(),mem_fun(),mem_fun_ref(),not1(),not2()bind1st() 用来给二元仿函数的一个参数提供一个值,于是得到一个一元匿名函数对象。类似的,bind2nd()用来给二元仿函数的第二个参数提供一个值,于是也得到一个匿名的一元函数对象. 对于类MyC

2015-07-04 00:07:43 3739

原创 C++运行时错误集

1、不能用空字符指针来构造string 对象

2015-07-02 09:36:03 3605

原创 STL复习

STL将数据结构和算法分离,通过迭代器粘合起来。每个容器的组成都有:成员类型 , 成员函数 和 成员变量。容器的存储要么是连续内存, 要么是基于节点的容器。连续内存的容器中常用的string 和 vector,其实现不考虑引用计数,只需要三个成员就行:记录元素个数的size, 记录当前容量的 capacity 和 管理动态内存的 指针 p.C98中的函数适配器 bind1st, bind2

2015-07-01 17:42:33 2946

转载 使用 CRT 库查找内存泄漏

文章来自 点击打开链接内存泄漏,即未能正确释放以前分配的内存,是 C/C++ 应用程序中最难以捉摸也最难以检测到的 Bug 之一。最初少量内存泄漏可能不引人注目,但随着时间的推移,内存泄漏越来越多,就会出现一些征兆,包括性能下降,在应用程序内存不足时发生崩溃。更严重的是,占用了所有可用内存的泄漏应用程序可能会导致其他应用程序崩溃,从而无法确定问题出在哪个应用程序

2015-06-28 18:04:52 3165

原创 C++中头文件的现状

内容来自 effective C++ 第二版 条款49--熟悉标准库标准库中的,不带.h 的头文件都是官方标准,而且都在std空间中。包括以C开头的C语言功能库, 也在std空间中。标准C头文件 stdlib.h 等,同样可以使用,只是不需要使用std命名空间。.h的C++库不是官方标准,也不在std空间中。需要注意的是sting.h 和 cstring都是C语言函数功能库,于是C++

2015-06-25 10:39:11 2954

原创 C++对象的内存模型

看了C++ under the hood之后,C++对象的内存模型是这样的:涉及到虚的,就需要额外的存储空间。虚这里指的是虚函数和虚继承,额外的存储是对象内部需要存储虚函数表指针和虚基类表指针。一个类的内存的分布在VC下是这样的:先是非虚基类子对象(包括非虚基类的虚函数表指针和成员),接着是虚基类表指针,接着才是该类本身扩展的成员,然后是虚基类子对象。该类的虚函数如果在基类中虚线,会在对应的虚

2015-06-25 08:27:35 3136

原创 关于不能将char** 类型转化为 const char**

对于二级指针来说,不能将char** 类型转化为const char** 类型。 const char x = 31; char y = 41; char *q = &y;&x的类型显然为 const char *, &q的类型是char **,  假设能将char **类型转化为 const char **, 那么可以另外定义一个变量:

2015-06-24 22:01:26 5235

原创 QT 画图工具 QWT 和 QwtPolar 在 windows 和 linux 下的编译安装

win8.1 64位+VS2013+qt-opensource-windows-x86-msvc2013_64_opengl-5.4.1测试不行,只能在32位的qt使用win8.1 64位+VS2010+qt-opensource-windows-x86-msvc2013_opengl-5.4.1测试通过。去sourceforce下载点击打开链接  QWT, 我下载的版本是qwt-6.1.

2015-06-16 13:19:40 9817

原创 前缀表达式与后缀表达式

前缀表达式与后缀表达式都可以由中缀表达式来转换而成,由于在转化的过程中已经考虑了优先级,所以前缀表达式和后缀表达式的求值直接借助栈就可以,不再有优先级的规则。中缀表达式转换为前缀表达式和后缀表达式都借助栈来完成。转换时,运算符压栈,数字直接输出。求值时,数字压栈。原理:1、中缀形式的四则运算,相同等级的,总是从前往后计算。2、无论是前缀表达式还是后缀表达式的求值,最先扫描到的运算符肯定是最先求值的...

2015-06-14 14:38:39 4693

原创 再读effective c++

现在所说effective C++的系列历史,最开始Meyers出版的是effective C++第一版,然后有了more effective C++,然后是effective C++的第二版,接着是effective C++的第三版,最后是最新的 effective modern C++。effective modern C++里主要讲C++ 11的现代编程语言特性,包括类型推导,移动语义,右值

2015-06-12 22:10:29 3123

原创 VS2013下的静态链接库和动态链接库的创建和使用

建立控制台程序,静态链接库还是动态链接库,项目配置属性里改成对应的即可。静态库编译之后会生成对应的.lib文件,在工程A中使用时,配置A的属性,1、配置属性 == 》C/C++  ==》常规  附加的include 路径里,添加头文件所在的路径。2、配置属性 == 》链接器 ==》常规  附加库目录里,添加.lib文件所在的路径。3、配置属性 == 》链接器 ==》输入 附加依

2015-06-12 08:15:36 12895

原创 使用malloc在堆上创建二维数组

先回顾new在堆上分配内存,见我的博文点击打开链接 C/C++的数据类型判断的最后总结的:如果new后边的类型是非数组类型,那么返回的类型是这种类型的指针(最内层的指针,是其本质);如果new后边的类型是数组,那么返回的类型是数组退化为指针之后的类型。关于退化,见我的博文点击打开链接中关于C/C++赋值中的退化规则。malloc的返回值是void* 类型的泛型指针,需要强制类型转换为其它指针类

2015-06-11 19:36:04 4021

原创 QT项目笔记

最近在做基于QT的烟箱分类计数系统,一共四个串口,其中三个串口接收扫描头发送过来的条码数据,剩下一个串口发送确认信号(确认有烟箱,升降机中的托盘会触发扫描头发送数据)。四个串口开四个独立的线程读取数据,通过继承QThread类,在run() 函数中定义自己封装的串口类对象(封装QSerialPort类),然后在run()函数中调用exec()函数,启动线程的事件循环。借助Qt的信号槽机制,将串

2015-06-03 20:45:20 3157

原创 模板元中的类型分类技术(type classification)

如果模板的参数T是指针,引用或者是数组类型,需要判断T究竟是哪一种。比如是指针类型,需要知道其所指的类型baseT和最终所涉及到的基本类型bottomT,例如对于int **,baseT的类型是int*, botton的类型是 int。 int *&类型,baseT的类型是int*, bottomT的类型是int。 typedef int* parr[]; baseT的类型是int*, bot

2015-05-29 08:30:21 3015

原创 QT拾遗

Qt5中,任何的static函数,成员函数,全局函数,仿函数,Lambda函数都可以链接到信号函数上,不过注意信号函数还是需要显示的通过signals来声明。只是此时的语法是QObject::connect(&sender, &SenderClass::sig, gfunc/functor...)sig是信号函数。

2015-05-28 00:35:41 2793

原创 模板元编程

类是对对象的抽象,类模板则是对类的抽象。在更高的抽象观点上来看,类型和值是同一种东西,同样可以计算。模板可以看作是一种更智能的宏,为了在使用时的一致性,使用了许多的技巧。现代的编程语言,要么为了效率,把以前运行时的工作拿到编译期。要么为了更大的自由度,把以前编译期的动作拿到运行期。模板的特化可以看作是在编译期执行的运行期的if else的控制。

2015-05-24 16:16:38 3240

原创 C++中的隐式类型转换

如果有两个类Apple和Orange, 可通过两种方式将Apple 类对象隐式的转化为Orange 类对象来使用。1、Orange 具有一个可只接受Apple 类型的参数的构造函数。Orange(const Apple& apple,  Arg arg = 0);2、Apple 具有一个类型转换函数:operator Orange() ;禁止这两种隐式转换:把1中的构造函数设为

2015-05-23 11:41:56 3403

原创 C++ 虚函数语义学

C++中的多态通过虚函数表实现,需要在运行时,根据指针所指对象的实际类型,根据对象中的虚函数表指针来索引相应的虚函数来调用。对于class Derived : public Base1, public Base2Base2 *pbase2 = new Derivedpbase2会调整this指针,使pbase2 指向 base2 subobject

2015-05-22 21:30:07 3222

原创 C++ 构造函数语义学与 const rvalue reference

此文源自《深度探索C++对象模型》第二章构造函数语义学和《Effective Modern C++》item17-Understand special member function generation.c++98中,当需要的时候(代码中使用了却没有显示的声明时),编译器会自动合成出这是个函数:默认构造函数,拷贝构造函数,赋值函数和析构函数。默认构造函数只有在没有声明任何构造函数的时候才会被

2015-05-22 10:47:02 3651

原创 C语言中的UNION

union类型,同一块内存按照其成员变量的类型来解释,具体其比特位的值,由最后一个对其成员变量的赋值复句决定。union { int* pv; int i; } u;若有 int j{1}; u.pv = &j; 那么u.i 的值就是 u对应的比特位的前四个字节 的按int 类型来解析的值。 也就是说, 但使用u.pv 时,是将u对应的比特位按int * 来解析, 而是用u.i 时,

2015-05-21 00:07:34 3262

原创 C++中的多态

多态只有使用指针和引用才能表现出来。实在运行期决议的,所以通过指针或引用来调用虚函数时,需要看指针和引用被初始化时指向的对象的类型。由于一般函数的调用采用的是name mangling原理来函数改名,而虚函数却是需要通过查找虚函数表来索引对应的虚函数指针来调用。所以需要看指针和引用被初始化时指向的对象,需要到对象的内存布局里,根据其中的vptr 来调用对应的虚函数。根据面向对象的里氏替换原则,

2015-05-20 15:38:12 3280

原创 C++11 移动语义和完美转发

所谓的移动语义即就是transfer ownership,转移所有权。而move() 和 farward() 只不过是对类型转换的一个包装而已。

2015-05-19 23:37:16 4221

原创 VS2013下C风格的文件读写

今天帮同学写一个C风格的文件读写程序,发现这块儿有些遗忘了,现在记下来。程序的要求是从一个保存整数的文本里读取整数,如果相邻位置有重复的整数,重复的只算一次。把读取的整数存到一个文件里,对应的序号(从1开始)存到另外一个文件里。在VS中直接使用fopen() 是不能通过的,需要在工程属性里,预处理器定义栏里,添加 _CRT_SECURE_NO_WARNINGS这里的CRT是

2015-05-19 15:09:50 9017

原创 C++11 ref函数的使用

说到ref() 函数,就必须先提ref() 函数的返回值 reference_wrapper 类类型,reference_wrapper 是个类模板,用来模仿一个类型为T 的对象的引用,使用起来就像是引用一样,不过reference_wrapper 对象是可以拷贝构造和赋值构造的。template class reference_wrapper {public: re

2015-05-17 18:49:55 11647

原创 C++11 result_of函数的使用

result_of() 函数使用到了模板元编程技术,对于 F(Arg1, Arg2... Arg3) ,其中F 是一个可调用对象(函数指针,函数引用, 成员函数指针,或者是函数对象)f 的类型,Arg是其参数arg1,  arg2 的类型。 那么reslut_of Func(Arg1, Arg2... Arg3)> :: type 表示的也就是 f(arg1,arg2 ... argn)的返回值的

2015-05-17 15:43:22 11466

原创 C++11 bind函数实现原理图

本文内容来自http://blog.think-async.com/2010/04/bind-illustrated.html1、bind函数能够将用户提供的需要一个参数的函数调整为不需要参数的函数对象。需要的时候,绑定的值(这个例子中是123)存储在函数对象中,自动地传递给用户指定的函数。一个匿名类(即这里的binder类)的成员变量捕获了函数指针的值和绑定的参数的值,匿名类

2015-05-16 19:12:31 9678 1

原创 C++ async 函数的使用

future表示一个类型为T的future值,这个值可以通过future的get()函数来获取。get()函数是同步的,从子线程获取时阻塞当前线程,直到返回。packaged_task,不过不能接受bind() 返回值。package_task于是,可以将packaged_task传出在执行的结果。#include #include #include #include

2015-05-14 10:20:18 12058 1

原创 win8 64位 VS2013下boost库的编译

首先到boost库的官网http://www.boost.org/ 下载boost库的最新版本1.58.0, 下载到的压缩包boost_1_58_0.zip大小为117M。将压缩包解压到任意目录下,我使用的是D盘的根目录。在cmd下进入到解压之后的路径,执行bootstrap.bat这个文件。执行结束之后,会生成b2.exe这个文件。执行b2.exe这个可执行程序,开始编译

2015-05-07 13:31:52 6789

原创 C/C++赋值中的退化规则

在赋值过程中1、const属性可能会丢失。const int a = 3; 既可以 int b =a ; 或者 const int b = a.  b本身就只是a的一个拷贝,只是一个副本,并不能通过b来访问a。2、数组会退化为指向首元素的指针。char a[] = "abcde";  char *p = a;  a的类型是 char [6], p的类型是 char *,虽然

2015-05-06 18:00:09 6871

原创 C语言中的字符串

首先需要说明的是,C语言里的字符串其实就是字符数组,C++中的字符串类指的是std空间里的string类。char *p;这句声明(此处也是定义)了一个char*类型的变量,即一个字符指针变量,编译器要在栈上分配出4个字节的(sizeof(p) = 4,32位时)空间来存储p,注意此时p没有初始化,这不是一个好习惯。char *p = "abcde";这句编译器先在常量存储区开辟6个字节的

2015-05-06 15:07:39 6196

原创 C/C++的数据类型判断

C/C++是静态类型语言,变量都需要明确的类型来定义。定义时,把变量名拿掉,剩下的就是变量的类型。可通过 #include 头文件,调用 typeid(对象名).name() 来查看。比如 char *p; p的类型是char *.void (*f)(int i, double d); 则f的类型是 void (*)(int, double);int a[3][4]; 则a的类

2015-05-06 14:47:44 10358 1

原创 C++中的RVO与NVR优化

先上代码:#include using namespace std; class MyClass { private: int m_i; public: MyClass(int i);

2015-05-05 18:08:42 18419

tmux_for_git-bash.zip

tmux_for_git-bash 来自 github,原始链接也许不能下载。tmux_for_git-bash 来自 github,原始链接也许不能下载。

2020-05-11

The Hacker’s Guide to Scaling Python

The Hacker's Guide to Scaling Python Julien Danjou The Hacker's Guide to Scaling Python Julien Danjou

2018-05-25

Mastering TensorFlow 1.x

Mastering TensorFlow 1.x Copyright 2018 Packt Publishing

2018-04-25

Deep Learning with TensorFlow 第二版

Deep Learning with TensorFlow Second Edition 2018 Packt Publishing

2018-04-18

With Open AI, TensorFlow and Keras Using Python

With Open AI, TensorFlow and Keras Using Python

2018-04-18

Discover the Mathematical Language of Data in Python

Discover the Mathematical Language of Data in Python

2018-04-18

Memory Dump Analysis Anthology, Volume 3 内存分析技术

Memory Dump Analysis Anthology 内存分析系列 缺少第四卷

2018-04-08

Memory Dump Analysis Anthology, Volume 5

Memory Dump Analysis Anthology, Volume 5 内存分析技术系列 缺少第四卷

2018-04-08

Memory Dump Analysis Anthology Volume 7

Memory Dump Analysis Anthology, Volume 7 内存分析技术系列

2018-04-08

Machine Learning with TensorFlow

Machine Learning with TensorFlow tensorflow 学习资料

2018-03-19

sourceInsight4 4084破解

sourceInsight4 4084破解

2017-03-05

sourceInsight4 2017最新版

sourceInsight4 支持代码折叠 支持代码折叠 支持代码折叠

2017-02-23

GNU二进制工具链介绍

GNU二进制工具链介绍

2017-02-19

VSPD虚拟串口软件

VSPD虚拟串口软件 vspd7.2.308.7

2016-12-09

securecrt注册机

securecrt注册机,支持最新8.0版本

2016-12-09

Ultra Edit

编辑器

2016-08-14

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除