C++
文章平均质量分 70
猫叔66
这个作者很懒,什么都没留下…
展开
-
#ifndef/#define/#endif使用详解
想必很多人都看过“头文件中的 #ifndef/#define/#endif 防止该头文件被重复引用”。但是是否能理解“被重复引用”是什么意思?是不能在不同的两个文件中使用include来包含这个头文件吗?如果头文件被重复引用了,会产生什么后果?是不是所有的头文件中都要加入#ifndef/#define/#endif 这些代码? 其实“被重复引用”是指一个头文件在同一个cp转载 2017-12-23 10:38:37 · 367 阅读 · 0 评论 -
值传递和地址传递的理解
void func(int a){a=100;} int a=10; func(a); printf("a=%d",a); // 仍然显示 a=10, 因为整型参数a在func()中是按值传递的, 也就是说func()仅使用a的值, 而对存储a的内存地址不加修改; void func(int* a){ *a=100;} int a=10; func(&a); printf("a=%d",a)转载 2017-02-26 23:58:06 · 364 阅读 · 0 评论 -
initializer_list中的const auto& 问题
void error_msg(ErrCode e, initializer_list il){ cout << e.msg() << ":"; for (const auto &elem : il) cout << elem << " "; cout << endl;}initializer_list对象中的元素永远是常量值,但是为什么范围转载 2017-03-05 09:52:16 · 3543 阅读 · 0 评论 -
C++中引用(&)的用法和应用实例
对于习惯使用C进行开发的朋友们,在看到c++中出现的&符号,可能会犯迷糊,因为在C语言中这个符号表示了取地址符,但是在C++中它却有着不同的用途,掌握C++的&符号,是提高代码执行效率和增强代码质量的一个很好的办法。在 c++学习提高篇(3)---隐式指针的文章中我详细介绍了在隐式指针&的用法,其实这两个概念是统一的。引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确、转载 2017-03-03 09:44:17 · 191 阅读 · 0 评论 -
STL中vector,list,deque和map的区别
在STL中基本容器有: string、vector、list、deque、set、mapset 和map都是无序的保存元素,只能通过它提供的接口对里面的元素进行访问set:集合, 用来判断某一个元素是不是在一个组里面,使用的比较少map:映射,相当于字典,把一个值映射成另一个值,如果想创建字典的话使用它好了底层采用的是树型结构,多数使用平衡二叉树实现,查找某一值是常数时间,遍历起来效果也不错, 只原创 2017-02-15 12:14:17 · 427 阅读 · 0 评论 -
对窗口过程函数WndProc()的一点理解
函数原型: LRESULTCALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) 窗口过程函数决定了当一个窗口从外界接收到不同的信息时,所采取的不同反应,即主要用于处理发送给窗口的信息。hwnd是要处理窗口的句柄;message是消息ID,代表了不同的消息类型;w转载 2017-02-22 22:45:59 · 2706 阅读 · 0 评论 -
C++中的explicit关键字 抑制隐式转换
在C++程序中很少有人去使用explicit关键字,不可否认,在平时的实践中确实很少能用的上。再说C++的功能强大,往往一个问题可以利用好几种C++特性去解决。但稍微留心一下就会发现现有的MFC库或者C++标准库中的相关类声明中explicit出现的频率是很高的。了解explicit关键字的功能及其使用对于我们阅读使用库是很有帮助的,而且在编写自己的代码时也可以尝试使用。既然C++语言提供这种特性转载 2017-03-02 15:50:18 · 381 阅读 · 0 评论 -
STL中map的operator[ ]使用方法
在STL中,map是一个关联式容器,它提供一对一的数据处理能力,即其中每一个元素都是一个键值对,通过一个唯一的关键字,可以唯一映射到对应的数据值。而map中重载了下标运算符[],通过下标操作,开发人员可以很方便地根据关键字获取到对应的值。虽然使用方便,但是还是有一些地方容易出现问题,值得大家的注意。 下面代码的输出结果会什么呢?[cpp] view转载 2017-03-02 14:50:20 · 703 阅读 · 0 评论 -
POSIX 线程详解
多线程转载 2017-02-10 11:45:24 · 261 阅读 · 0 评论 -
accept()还有服务端和客户端
accept()企业认领开放分类:编程accept():在一个套接口接受一个连接。函数定义: #include int accept(int sockfd, void *addr, int *addrlen); sockfd 相当简单,是和 listen() 中一样的套接字描述符。addr 是个指向局部的数据结构 sockaddr_i转载 2017-02-05 15:50:31 · 810 阅读 · 0 评论 -
Linux fork()返回值说明
对于主进程 fork()返回新建的子进程ID, 子进程fork()返回0 http://blog.chinaunix.net/u1/53053/showart_425189.html进程配置有唯一的进程控制块PCB,由proc结构和usr结构组成。下面依次介绍进程相关的系统调用:1:fork()函数 创建一个子进程 #include /*转载 2017-02-05 10:41:20 · 435 阅读 · 0 评论 -
socket中send和recv函数的阻塞理解
int send( SOCKET s, const char FAR *buf, int len, int flags );不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据。客户程序一般用send函数向服务器发送请求,而服务器则通常用send函数来向客户程序发送应答。 该函数的第一个参数指定发送端套接字描述符(发给谁写谁的socket); 第二个参数指转载 2017-02-04 23:01:27 · 5285 阅读 · 0 评论 -
通过抓包了解TCP三次握手的内容
1111111转载 2016-11-09 22:25:33 · 544 阅读 · 0 评论 -
比如notification.flags |= Notification.FLAG_AUTO_CANCEL “|=”是啥意思?
在C++ 语言好像经常看到这种写法,我没记错的话,应该是notification.flags |= Notification.FLAG_AUTO_CANCELnotification.flags 和后面的 Notification.FLAG_AUTO_CANCEL做异或 把notification.flags除去Notification.FLAG_AUTO_CANCEL这种属性原创 2016-09-01 16:31:46 · 2781 阅读 · 0 评论 -
在C++中用虚函数的作用是什么?为什么要用到虚函数
虚函数联系到多态,多态联系到继承。所以本文中都是在继承层次上做文章。没了继承,什么都没得谈。下面是对C++的虚函数这玩意儿的理解。一, 什么是虚函数(如果不知道虚函数为何物,但有急切的想知道,那你就应该从这里开始)简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行分离;用形转载 2016-07-06 10:06:24 · 424 阅读 · 0 评论 -
T和L的区别在哪里
一、在字符串前加一个L作用: 如 L"我的字符串" 表示将ANSI字符串转换成unicode的字符串,就是每个字符占用两个字节。 strlen("asd") = 3; strlen(L"asd") = 6; 二、 _T宏可以把一个引号引起来的字符串,根据你的环境设置,使得编译器会根据编译目标环境选择合适的(Unicode还是ANSI)字符处理方式 如果你定原创 2016-07-14 18:45:24 · 811 阅读 · 0 评论 -
局部变量,外部变量,static局部变量,static外部变量
在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下:变量的声明有两种情况:(1) 一种是需要建立存储空间的(定义、声明)。例如:int a在声明的时候就已经建立了存储空间。 (2) 另一种是不需要建立存储空间的(声明)。例如:extern int a其中变量a是在别的文件中定义的。前者是"转载 2017-03-06 16:31:35 · 575 阅读 · 0 评论 -
indexOf(String.indexOf 方法)0
原文地址:http://www.sufeinet.com/thread-651-1-1.html indexOf(String.indexOf 方法)字符串的IndexOf()方法搜索在该字符串上是否出现了作为参数传递的字符串,如果找到字符串,则返回字符的起始位置 (0表示第一个字符,1表示第二个字符依此类推)如果说没有找到则返回 -1 返回 String 对象内第转载 2017-03-06 16:50:15 · 1983 阅读 · 0 评论 -
什么是C++虚函数、虚函数的作用和使用方法
C语言中文网推出辅导班啦,包括「C语言辅导班、C++辅导班、算法/数据结构辅导班」,全部都是一对一教学:一对一辅导 + 一对一答疑 + 布置作业 + 项目实践 + 永久学习。QQ在线,随时响应!我们知道,在同一类中是不能定义两个名字相同、参数个数和类型都相同的函数的,否则就是“重复定义”。但是在类的继承层次结构中,在不同的层次中可以出现名字相同、参数个数和类型都相同而功能不同的函数。例转载 2017-03-15 11:34:06 · 333 阅读 · 0 评论 -
C++中的struct和class的区别
转载来源:http://blog.sina.com.cn/s/blog_48f587a80100k630.htmlC++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能。struct能包含成员函数吗? 能!struct能继承吗? 能!!struct能实现多态吗? 能!!! 既然这些它都能实现,那它和c转载 2017-12-23 09:48:06 · 415 阅读 · 0 评论 -
关于typedef的用法总结
关于typedef的用法总结 不管实在C还是C++代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中。typedef与#define有些相似,但更多的是不同,特别是在一些复杂的用法上,就完全不同了,看了网上一些C/C++的学习者的博客,其中有一篇关于typedef的总结还是很不错,由于总结的很好,我就不加修改的引用过来了,以下是引用的内容(红色部分是我转载 2017-12-21 10:32:57 · 352 阅读 · 0 评论 -
关于typedef的用法总结
关于typedef的用法总结 不管实在C还是C++代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中。typedef与#define有些相似,但更多的是不同,特别是在一些复杂的用法上,就完全不同了,看了网上一些C/C++的学习者的博客,其中有一篇关于typedef的总结还是很不错,由于总结的很好,我就不加修改的引用过来了,以下是引用的内容(红色部分是我转载 2017-12-21 10:32:20 · 249 阅读 · 0 评论 -
c++强制类型转换:dynamic_cast、const_cast 、static_cast、reinterpret_cast
dynamic_cast: 通常在基类和派生类之间转换时使用const_cast: 主要针对const和volatile的转换static_cast: 一般的转换(no run-time check)通常,如果你不知道该用哪个,就用这个。 reinterpret_cast: 用于进行没有任何关联之间的转换,比如一个字符指针转换为一个整形数。1)static_ca转载 2017-12-21 09:53:59 · 307 阅读 · 0 评论 -
typedef和define具体的详细区别
1) #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。例如: #define PI 3.1415926 程序中的:area=PI*r*r 会替换为3.1415926*r*r 如果你把#define语句中的数字9 写成字母g 预处理也照样带入。 2)typedef是在编译时处转载 2017-12-01 11:23:36 · 232 阅读 · 0 评论 -
auto_ptr
C++的auto_ptr所做的事情,就是动态分配对象以及当对象不再需要时自动执行清理。使用std::auto_ptr,要#include 。[1] 代码编辑在C++中, auto_ptr是一个类,它用来实现对动态分配对象的自动释放。它的源代码:1234567891转载 2017-12-01 11:20:01 · 207 阅读 · 0 评论 -
C++ 中 ZeroMemory、memset 危险需慎用
使用C/C++编程时,常使用ZeroMemory、memset或 “={0}”来对结构体对象进行初始化或清零。然而这三种方式都有各自的特点,使用时需谨慎,否则容易出现严重错误,本人今日解决一个导致宕机的bug,查了几小时,才发现是由同事乱用ZeroMemory所致。于是搜集资料,撰此文以共勉。memsetvoid *memset(void *s,int转载 2017-11-30 14:55:56 · 708 阅读 · 0 评论 -
ExtractFileDir 与 ExtractFilePath 的区别
ExtractFileDir 与 ExtractFilePath 的区别 ExtractFileDir 从文件名中获取目录名(文件不在根目录下时取得的值后没有“/”,在根目录时一样,都是盘符,例如“C:/”) ExtractFilePath 从文件名中获取路径名(文件不在根目录下时取得的值后有“/”,在根目录时一样,都是盘符,例如“C:/”) 函数的声明:转载 2017-11-30 09:20:37 · 2865 阅读 · 0 评论 -
有return的情况下try catch finally的执行顺序(最有说服力的总结)
结论:1、不管有木有出现异常,finally块中代码都会执行;2、当try和catch中有return时,finally仍然会执行;3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;4、finally转载 2017-07-28 15:00:02 · 234 阅读 · 0 评论 -
C++全局变量的声明和定义
参考:http://wrchen.blog.sohu.com/71617539.html(1)编译单元(模块) 在VC或VS上编写完代码,点击编译按钮准备生成exe文件时,编译器做了两步工作:第一步,将每个.cpp(.c)和相应的.h文件编译成obj文件;第二步,将工程中所有的obj文件进行LINK,生成最终.exe文件。 那么,错误可能在两个地方产转载 2017-06-07 14:00:44 · 418 阅读 · 0 评论 -
c++语言 全局变量 可声明问题
如果static和extern都没有,表示定义一个全局变量,其作用域限制在从定义开始到当前文件结尾。static的作用是将全局变量的作用域限制在从定义开始到当前文件结尾,且其他文件不可以用extern来让这个变量可见。extern的作用是声明一个已经在别处定义了的全局变量,它不是重新定义新的全局变量,而是起到扩展全局变量作用域的作用。a.c:int i; //定义i变量,且可用extern去扩展它原创 2017-06-07 13:58:25 · 283 阅读 · 0 评论 -
一个函数名后面加const表示什么意思?
这是把整个函数修饰为const,意思是“函数体内不能对成员数据做任何改动”。如果你声明这个类的一个const实例,那么它就只能调用有const修饰的函数。 如:12345678910111213141516 class原创 2017-06-05 17:04:31 · 6352 阅读 · 1 评论 -
try,catch,finally分别在什么情况下使用
首先没有看见你的代码里面有catch的部分。1、将预见可能引发异常的代码包含在try语句块中。2、如果发生了异常,则转入catch的执行。catch有几种写法:catch这将捕获任何发生的异常。catch(Exception e)这将捕获任何发生的异常。另外,还提供e参数,你可以在处理异常时使用e参数来获得有关异常的信息。catch(Exception的派生类 e)这将捕获派生类定义的异常,例如,原创 2017-04-26 16:37:47 · 4191 阅读 · 0 评论 -
C++ ofstream和ifstream详细用法
ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间; 在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符: 1、插入器( 向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout原创 2016-07-14 17:49:11 · 227 阅读 · 0 评论 -
C++中 模板Template的使用
1、在c++Template中很多地方都用到了typename与class这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢?答:class用于定义类,在模板引入c++后,最初定义模板的方法为:template,这里class关键字表明T是一个类型,后来为了避免class在这两个地方的使用可能给人带来混淆,所以引入了typename这个关键字,它的作用同class一样表明后面的符号为转载 2016-07-01 10:52:21 · 233 阅读 · 0 评论 -
C++析构函数为什么要为虚函数
C++析构函数为什么要为虚函数注:本文内容来源于zhice163博文,感谢作者的整理。1.为什么基类的析构函数是虚函数? 在实现多态时,当用基类操作派生类,在析构时防止只析构基类而不析构派生类的状况发生。 下面转自网络:源地址 http://blog.sina.com.cn/s/blog_7c773cc50100y9hz.html a.第一段代码转载 2016-07-01 10:17:11 · 219 阅读 · 0 评论 -
DLL的进入退出——由DLL_PROCESS_ATTACH而联系搜索起来。
线程可以调用GetModuleHandle函数来判断一个DLL是否被载入了进程的地址空间,HINSTANCE GetModuleHandle(LPCTSTR lpszModuleName);例子 HINSTANCE hinstDLL;hinstDLL = GetModuleHandle(“SomeDLL.dll”);If (hinstDLL == NULL)转载 2016-03-11 10:00:07 · 8246 阅读 · 0 评论 -
def文件里面在导出函数后 加private是什么意思
EXPORTS 语句引入了一个由一个或多个 definitions(导出的函数或数据)组成的节。每个定义必须在单独一行上。EXPORTS 关键字可以在第一个定义所在的同一行上或在前一行上。.def 文件可以包含一个或多个 EXPORTS 语句。导出definitions 的语法为:entryname[=internalname] [@ordinal [NONAME]] [PRIVATE] [D原创 2016-03-11 09:10:27 · 1146 阅读 · 0 评论 -
在DLL编程中,导出函数为什么需要extern "C"
一般来讲,在DLL编程过程中,对于导出的函数前 都需要加入 extern “C”, extern 表示这是个全局函数,可以供各个其他的函数调用; “C” 表示编译时按照 C编译器的方式进行编译,而不是C++。 C++的编译方式考虑了函数重载,所以对函数名进行了新的修饰,产生了所谓的破坏性命名。不过,也有特殊情况,有三种例外情况可以不加extern “C转载 2016-03-10 19:58:00 · 809 阅读 · 0 评论 -
__declspec(dllexport)和__declspec(dllimport)
__declspec(dllexport) __declspec(dllexport) 将一个函数声名为导出函数,就是说这个函数要被包含她的程序之外的程序调用。 extern "C" 指示编译器用C语言方法给函数命名。 在制作DLL导出函数时由于C++存在函数重载,因此__declspec(dllexport转载 2016-03-09 10:06:33 · 282 阅读 · 0 评论 -
MFC常用控件(一)
1.1 传统控件的控件通知消息控件通过向父窗口发送控件通知消息来表明发生了某种事件.例如,当用户在按钮上单击鼠标时,按钮控件会向父窗口发送BN_CLICKED消息.传统控件的通知消息实际上是通过WM_COMMAND消息发给父窗口的(滚动条除外),在该消息的wParam中含有通知消息码(如BN_CLICKED)和控件的ID,在lParam中则包含了控件的句柄.利用ClassWizar转载 2016-03-18 16:39:46 · 806 阅读 · 0 评论