
C/C++学习
碧海凌云
从平凡到神奇
展开
-
boost::thread多线程
6.1. 概述 线程就是,在同一程序同一时间内允许执行不同函数的离散处理队列。 这使得一个长时间去进行某种特殊运算的函数在执行时不阻碍其他的函数变得十分重要。 线程实际上允许同时执行两种函数,而这两个函数不必相互等待。一旦一个应用程序启动,它仅包含一个默认线程。 此线程执行 main() 函数。 在 main()中被调用的函数则按这个线程的上下文顺序地执行。 这样的程序称为单线程程序。反...转载 2019-02-12 16:10:23 · 994 阅读 · 0 评论 -
C/C++创建和删除文件夹操作
一、创建文件夹 1、调用Windows API函数 CreateDirectory() 头文件#include<windows.h> //头文件 #include<iostream> using namespace std; int main() { string dirName = "D:\\test"; bool flag = CreateDir转载 2018-01-03 16:10:29 · 6352 阅读 · 0 评论 -
struct tm 和 time_t 时间和日期的使用方法
1.概念在C/C++中,对字符串的操作有很多值得注意的问题,同样,C/C++对时间的操作也有许多值得大家注意的地方。下面主要介绍在C/C++中时间和日期的使用方法.通过学习许多C/C++库,你可以有很多操作、使用时间的方法。但在这之前你需要了解一些“时间”和“日期”的概念,主要有以下几个:Coordinated Universal Time(UTC):协调世界时,又称为世界标准时间,也就是大家所熟知转载 2018-01-03 15:14:43 · 14175 阅读 · 0 评论 -
C/C++中判断某一文件或目录是否存在
C/C++中判断某一文件或目录是否存在 1.C++很简单的一种办法:#include <iostream>#include <fstream>using namespace std;#define FILENAME "stat.dat"int main(){ fstream _file; _file.open(FILENAME,ios::in); if(!_file)转载 2017-12-27 10:23:43 · 760 阅读 · 0 评论 -
memset用法详解与实现
memest原型 (please type "man memset" in your shell) void *memset(void *s, int c, size_t n); memset:作用是在一段内存块中填充某个给定的值,它对较大的结构体或数组进行清零操作的一种最快方法。常见的三种错误第一: 搞反了c 和 n的位置. 一定要记住 如果要把一个char a[20]清零, 一定是转载 2018-01-02 14:36:56 · 1177 阅读 · 0 评论 -
C++类的const、static和const static数据成员的初始化
C++类的const、static和conststatic数据成员的初始化参考:http://blog.youkuaiyun.com/yjkwf/article/details/6067267http://www.cnblogs.com/gysm/archive/2011/09/16/2179277.html//const数据成员必须在构造函数初始化列表中初始化//static数据成员必须在全局范围进行初始化,转载 2017-11-30 21:05:27 · 204 阅读 · 0 评论 -
__declspec关键字详细用法
__declspec用于指定所给定类型的实例的与Microsoft相关的存储方式。其它的有关存储方式的修饰符如static与extern等是C和C++语言的ANSI规范,而__declspec是一种扩展属性的定义。扩展属性语法简化并标准化了C和C++语言关于Microsoft的扩展。用法:__declspec ( extended-decl-modifier )extended-decl-modif转载 2017-12-15 14:53:43 · 975 阅读 · 0 评论 -
GDI和GDI+编程实例剖析
1.基本概念 GDI在Windows中定义为Graphics Device Interface,即图形设备接口,是Windows API(Application Programming Interface)的一个重要组成部分。它是Windows图形显示程序与实际物理设备之间的桥梁,GDI使得用户无需关心具体设备的细节,而只需在一个虚拟的环境(即逻辑设备)中进行操作。它的桥梁作用体现在:转载 2017-12-12 19:40:35 · 476 阅读 · 0 评论 -
C++ GDI+ DrawString 保存字符串文字为透明图片
实现通过GDI+将输入的字符串保存为背景透明的图片的示例代码【1】头文件 #ifndef _AFXSTD_EF4A7E9D_ECEF_4D13_B0AD_ADEB38D1E347_INCLUDE_H_ #define _AFXSTD_EF4A7E9D_ECEF_4D13_B0AD_ADEB38D1E347_INCLUDE_H_ #if _MSC_VER > 1000转载 2017-12-12 18:35:55 · 1555 阅读 · 0 评论 -
Windbg调试新手入门
1. WinDbg下载和安装 Install Debugging Tools for Windows 32-bit Versionhttp://www.microsoft.com/whdc/devtools/debugging/installx86.mspx Install Debugging Tools for Windows 64-bit Versionshttp://www.mic转载 2017-12-19 19:04:59 · 700 阅读 · 0 评论 -
C++ static、const和static const类型成员变量声明以及初始化
C++ static、const和static const 以及它们的初始化const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间。static表示的是静态的。类的静态成员函数、静态成员变量是和类相关的,而不是和类的具体对象相关的。即使没有具体对象,也能调用类的静态成员函数和成员变量。一般类的静态函数几乎就是一个全局函数,只不过它的作用域限转载 2017-12-01 13:55:29 · 203 阅读 · 0 评论 -
GDI+将CDC中画好的图像,保存到文件中
实现代码如下:int CGDIPSDIView::GetEncoderClsid( const WCHAR* format, CLSID* pClsid ) //GDI+取得不同类型图片编码类型的函数{ UINT num = 0; // number of image encoders UINT size = 0; // size of the转载 2017-12-09 19:07:54 · 1172 阅读 · 0 评论 -
static成员必须在类外初始化
为什么静态成员不能在类内初始化在C++中,类的静态成员(static member)必须在类内声明,在类外初始化,像下面这样class A{ private: static int count ; // 类内声明};int A::count = 0 ; // 类外初始化,不必再加static关键字为什么?因为静态成员属于整个类,而不属于某个对象,如果在类内初始化,会导致每个对象都转载 2017-11-30 21:01:10 · 3527 阅读 · 1 评论 -
GDI+编程说明及小结
GDI+编程说明及小结(叙述较为全面)原文地址:http://blog.youkuaiyun.com/byxdaz/article/details/5972759GDI+(Graphics Device Interface Plus图形设备接口加)是Windows XP和Windows Server 2003操作系统的子系统,也是.NET框架的重要组成部分,负责在屏幕和打印机上绘制图形图像和显示信息。GD转载 2017-12-08 21:53:16 · 1549 阅读 · 0 评论 -
Boost智能指针——scoped_ptr
boost::scoped_ptr和std::auto_ptr非常类似,是一个简单的智能指针,它能够保证在离开作用域后对象被自动释放。下列代码演示了该指针的基本应用:#include <string>#include <iostream>#include <boost/sc转载 2017-11-15 20:12:55 · 281 阅读 · 0 评论 -
关于 char 、 wchar_t 、 TCHAR 、 _T() ||| 宏 _T 、 TEXT 、 _TEXT 、 L
char :单字节变量类型,最多表示256个字符,wchar_t :宽字节变量类型,用于表示Unicode字符,它实际定义在<string.h>里:typedef unsigned short wchar_t。为了让编译器识别Unicode字符串,必须以在前面加一个“L”,定义宽字节类型方法如下:wchar_t c = `A’ ;wchar_t * p = L”Hello!” ;wchar_t a[转载 2017-11-10 10:23:35 · 395 阅读 · 0 评论 -
C++ 将对象的构造和析构函数声明为Protected的作用
在看代码的过程中,有时会发现析构函数被定义成virtual,有一些没有定义成virtual但被放置于protected下。网上搜了下了解了原因,下面是较好的解答:1、如果一个类被继承,同时定义了基类以外的成员对象,且基类析构函数不是virtual修饰的,那么当基类指针或引用指向派生类对象并析构(例如自动对象在函数作用域结束时;或者通过delete)时,会调用基类的析构函数而导致转载 2018-01-04 17:04:13 · 370 阅读 · 0 评论 -
虚析构函数和protected析构函数
一、虚析构函数类型需要虚析构函数的另外一个特征 是该类型具有指针成员或引用成员。如果有指针成员和引用成员,则该类型通常需要实现析构函数以及拷贝操作。通常,一个实现了析构函数的类型同时也需要实现拷贝构造函数与拷贝复制函数。作为一个经验法则:如果你有一个带有虚函数功能的类,则它需要一个虚析构函数,原因如下:1. 如果一个类有虚函数功能,它经常作为一个基类使用。2.如果它是一个基类,转载 2018-01-04 16:58:42 · 424 阅读 · 0 评论 -
Linux下读取Ini文件类
Linux下读取Ini文件类最近项目上有需要读取Ini文件 所谓Ini文件也就是文本文档 并且以//注释1/*注释2[Section]Key1=aaaKey2=bbb这种形式存在的文档自己编写了一个类 比较使用 简单 可以跨平台读写INI文件头文件Ini.h #include #include using namespace std; #define CONFIG转载 2018-01-22 18:38:51 · 4491 阅读 · 1 评论 -
C++ auto_ptr智能指针的用法
C++ auto_ptr智能指针的用法C++中指针申请和释放内存通常采用的方式是new和delete。然而标准C++中还有一个强大的模版类就是auto_ptr,它可以在你不用的时候自动帮你释放内存。下面简单说一下用法。用法一: std::auto_ptr<MyClass>m_example(new MyClass()); 用法二: std::auto_ptr<...转载 2018-03-21 20:10:26 · 431 阅读 · 0 评论 -
std::auto_ptr的原理及使用
std::auto_ptr的原理及使用 2015年11月13日 17:38:114027人阅读 评论(0) 收藏 举报 分类: C/C++(76) 版权声明:本文为博主原创文章,未经博主允许不得转载。 http://blog.youkuaiyun.com/makenothing/article/details/49821063 std::auto_ptrauto_ptr是C++标准库中()为了...转载 2019-02-12 16:30:54 · 935 阅读 · 0 评论 -
CTK框架介绍
CTK插件框架可以简单的描述为C++的动态组件系统Design CTK插件框架的设计有很大的灵感来自OSGi并且使得应用程序由许多不同的组件组合成一个可扩展模型。这个模型允许通过那些组件间共享对象的服务通信。 框架的分层模型被展示在图片1中包括: Plugins–插件是开发者创建的CTK组件 Services Layer–用动态的方式连接插件通过提供为C++对象提供一个发布-查找-绑定模型。转载 2018-02-27 21:07:12 · 15329 阅读 · 0 评论 -
深入理解C语言内存管理
之前在学Java的时候对于Java虚拟机中的内存分布有一定的了解,但是最近在看一些C,发现居然自己对于C语言的内存分配了解的太少。问题不能拖,我这就来学习一下吧,争取一次搞定。 在任何程序设计环境及语言中,内存管理都十分重要。内存管理的基本概念分析C语言内存的分布先从Linux下可执行的C程序入手。现在有一个简单的C源程序hello.c1 #include 2 #include 3转载 2018-02-07 13:46:15 · 286 阅读 · 0 评论 -
WinDebug的一些基本使用命令
查看当前线程的调用堆栈 kb 查看全部线程的调用堆栈 ~*kb显示分析的详细信息 !analyze -v 继续执行 g查看线程详细信息,例如线程入口地址 ~21 (数字代表线程id)查看变量地址 x 变量名,可以用通配符 例如 x 05memcorrupt!g_*用给定类型查看对象 dt 类型名 地址 例如 dt CAppInfo 0x00032cb0...转载 2018-02-11 14:49:27 · 1879 阅读 · 1 评论 -
C++将析构函数为啥需要定义成virtual
一般来说,如果一个类要被另外一个类继承,而且用其指针指向其子类对象时,如题目中的A* d = new B();(假定A是基类,B是从A继承而来的派生类),那么其(A类)析构函数必须是虚的,否则在delete d时,B类的析构函数将不会被调用,因而会产生内存泄漏和异常; 在构造一个类的对象时,先构造其基类子对象,即调用其基类的构造函数,然后调用本类的构造函数;销毁对象时,先调用本类的析构函数,然...转载 2018-02-11 09:43:49 · 1325 阅读 · 0 评论 -
Windows文件换行符转Linux换行符
前段时间,有个朋友碰到由于Windows的换行符和Linux换行符不一样,导致程序编译不通过。这个问题之前自己也碰到过,网上资料也蛮多,不过还是借此总结总结,因为发现总结+实践的方式能够让自己更好的提升。操作系统文件换行符 首先介绍下,在ASCII中存在这样两个字符CR(编码为13)和 LF(编码为10),在编程中我们一般称其分别为’\r’和’\n’。他们被用来作为换行标志,转载 2018-01-19 19:34:00 · 427 阅读 · 0 评论 -
C++_表达式x&(x-1)
x = x & (x - 1) 含义:这条语句执行一次,就会把x用二进制格式表示时的最右边的一个二进制1变为二进制0,因为x-1会将该位(x用二进制表示时最右边的一个二进制1)变为0; 应用1:把一个整数用二进制表示时,其中二进制1的个数;int Func(int x){ int count = 0; while (x) { count ++;转载 2018-02-03 13:35:50 · 2561 阅读 · 0 评论 -
解决VS编译提示“当前不会命中断点,源代码与原始版本不同”的问题
下面是一些汇总: 1、 今天在Visual Studio 2005中调试某个程序时遇到一个奇怪问题 就是在某个源文件中设置的断点老是无效,提示“当前不会命中断点。源代码与原始版本不同”信息 清理项目、重编项目、重新拷贝原文件都解决不了问题 “工具”,“选项”,“调试”,“要求源文件与原始版本完成匹配”去掉勾。 另外通过重新格式化出问题的源文件亦可以解决,即在VS2005中选择 “编辑”转载 2018-01-26 14:54:06 · 16565 阅读 · 1 评论 -
struct tm 和 time_t 时间和日期的使用方法
1.概念在C/C++中,对字符串的操作有很多值得注意的问题,同样,C/C++对时间的操作也有许多值得大家注意的地方。下面主要介绍在C/C++中时间和日期的使用方法.通过学习许多C/C++库,你可以有很多操作、使用时间的方法。但在这之前你需要了解一些“时间”和“日期”的概念,主要有以下几个:Coordinated Universal Time(UTC):协调世界时,又称为世界标准时间,也就是大家所熟原创 2018-02-01 16:27:27 · 357 阅读 · 0 评论 -
线程阻塞的原因
线程在运行的过程中因为某些原因而发生阻塞,阻塞状态的线程的特点是:该线程放弃CPU的使用,暂停运行,只有等到导致阻塞的原因消除之后才回复运行。或者是被其他的线程中断,该线程也会退出阻塞状态,同时抛出InterruptedException。 导致阻塞的原因有很多种,大致分为三种来讨论,分别是一般线程中的阻塞,Socket客户端的阻塞,Socket服务器端的阻塞。一般线程中的转载 2018-02-01 13:47:31 · 1621 阅读 · 0 评论 -
C++ 将对象的构造和析构函数声明为Protected的作用
在看代码的过程中,有时会发现析构函数被定义成virtual,有一些没有定义成virtual但被放置于protected下。网上搜了下了解了原因,下面是较好的解答:1、如果一个类被继承,同时定义了基类以外的成员对象,且基类析构函数不是virtual修饰的,那么当基类指针或引用指向派生类对象并析构(例如自动对象在函数作用域结束时;或者通过delete)时,会调用基类的析构函数而导致派生类转载 2018-01-24 20:01:32 · 3287 阅读 · 0 评论 -
Linux下字符转换函数
Linux下面的没有命名为 WideCharToMultiByte() 和 MultiByteToWideChar() 函数,WideCharToMultiByte,MultiByteToWideChar是windows下的函数,在linux下也有类似的两个函数:mbstowcs()wcstombs() 值得注意的是:size_t mbstowcs(wchar_t *wcstr,const转载 2018-01-23 20:07:49 · 382 阅读 · 0 评论 -
linux下宽字节和多字符之间的转换
本文介绍两个由C语言提供的宽字符(wchar_t类型)和多字节字符( 一个字符用一个或者多个字节表示) 转换函数,因此具有通用性(在Windows/Linux系统中都可以使用): 所需头文件:stdlib.h #include size_t mbstowcs( wchar_t *wcstr, const char *mbstr, size_t count );参数转载 2018-01-23 20:01:14 · 5167 阅读 · 0 评论 -
char,wchar_t 长度
char,wchar_t 长度 (测试环境:VC++6.0)char类型wchar_t类型类型大小(32位系统)8位16位常量字符表示法‘A’L’A’ 或 ‘A’常量字符串表示法‘hello’L’hello’一些使用方法char c=’A’; (c的值:0x41)wchar_t wc=’A’;转载 2017-11-10 09:58:18 · 4859 阅读 · 0 评论 -
C++字符类型TCHAR、char和wchar_t
1、首先,char是8位字符类型,最多只能包含256种字符,许多外文字符集所含的字符数目超过256个,char型无法表示。2、wchar_t是C/C++的字符数据类型,是一种扩展的字符存储方式,wchar_t类型主要用在国际化程序的实现中,但它不等同于unicode编码。unicode编码的字符一般以wchar_t类型存储。3、wchar_t数据类型一般为16位或32位,但不同的C或C++库有不同转载 2017-11-10 09:26:59 · 765 阅读 · 0 评论 -
C++中抽象类和接口的区别介绍
C++中抽象类和接口的区别介绍抽象类(abstract class)和接口(interface)的概念是面向对象设计中常用的概念, 也是比较容易混淆的概念. 在这里, 我提出一种区分它们的思路 1. 如果一个类B在语法上继承(extend)了类A, 那么在语义上类B是一个类A. 2. 如果一个类B在语法上实现了(implement)接口I, 那么类B遵从接口I制定的协议. 使用abstract转载 2016-12-13 09:27:44 · 647 阅读 · 0 评论 -
VS2013中安装配置boost_1_55_0库
VS2013中安装配置boost_1_55_0库Boost是一个和STL类似的标准库,但它扩充了STL使得泛型的优点发挥到最佳。因此现在Boost比STL更为实用。既然Boost这么实用,那么怎么去在Windows环境下去安装Boost库呢?下面分享一下我用VS2013配置boost_1_55_0库的操作工具/原料 Boost VS 2013 方法/步骤 1 下载Boost库,这里我选择下转载 2016-12-05 19:57:16 · 995 阅读 · 0 评论 -
大端模式和小端模式
大端模式和小端模式存储网络编程编译器ibm 在 各种计算机体系结构中,对于字节、字等的存储机制有所不同,因而引发了计算机 通信领 域中一个很重要的问题,即通信双方交流的信息单元(比特、字节、字、双字等等)应该以什么样的顺序进行传送。如果不达成一致的规则,通信双方将无法进行正 确的编/译码从而导致通信失败。目前在各种体系的计算机中通常采用的字节存储机制主要有两种:Big-Endian和Little-转载 2016-03-05 10:36:11 · 327 阅读 · 0 评论 -
大小端转换
文章以32位整数为输入,采用两种方法进行大小端转换,一个是宏定义,一个是函数形式;#include "stdio.h"#define T(x) (((x&0xff)<<24)|((x&0xff00)<<8)|((x&0xff0000)>>8)|((x&0xff000000)>>24)) //1.四个字节的排放顺序要弄清楚```void transfer(int x) { c转载 2016-03-05 10:38:02 · 5598 阅读 · 0 评论 -
C++学习方法
面向对象思想+CPP语法+算法+实践=学会 初期学习语法较重要,你写的代码编译器都“读”不懂,怎么行? 中后期思想和算法较重要,要多读书,博览群书。 (《The C++ Language》,《Thinking in C++》,《C++ Primer》必读) 最最最重要的是实践,没实践,一切都是空话。问题1: 可以跳过c直接学C++的,C和C++是完全两种语言。 他们的相同之处,是语法上很相转载 2016-03-03 10:35:28 · 746 阅读 · 0 评论