随笔分类 -  c++

摘要:最近在学习老师的网络代码时,看到定义了一个如下的结构体: struct MyData { int nLen; char data[0];}; 开始没有理解红色部分的内容,上网搜索下,发现用处很大,记录下来。 在结构中,data是一个数组名;但该数组没有元素;该数组的真实地址紧随结构体MyData之后 阅读全文
posted @ 2015-04-27 11:21 南哥的天下 阅读(812) 评论(0) 推荐(0)
摘要:为什么子类的初始化列表不能初始化父类的成员 C++初始化列表是一种效率更高的初始化方法,但也有一些不能使用的场景。 举个例子 以下定义一个矩形,然后再定义一个正方形,继承自矩形。 这段代码有问题吗? ... class Rectangle{ public: Rectangle() :a(0), b( 阅读全文
posted @ 2015-04-04 22:07 南哥的天下 阅读(2540) 评论(0) 推荐(0)
摘要:c++ STL容器的内存分配 一.前言在使用STL各类容器的时候,有时会出现迭代器失效,引用(指针)失效等情况的而发生,即使看似你的操作都是合法的情况下。 要了解问题的原因,我们就要了解C++中stl容器的内存分配策略。我们才知道在哪些操作下可能导致迭代器失效,引用(指针)失效。 二.问题分类首先我 阅读全文
posted @ 2015-03-31 21:34 南哥的天下 阅读(1503) 评论(0) 推荐(0)
摘要:C++的函数重载实现原理1. 什么是函数重载? 函数重载是指在同一作用域内,可以有一组具有相同函数名,不同参数列表(参数个数、类型、顺序)的函数,这组函数被称为重载函数。重载函数通常用来声明一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处。 二、为什么 阅读全文
posted @ 2015-03-14 13:25 南哥的天下 阅读(776) 评论(0) 推荐(1)
摘要:关于std::function 的用法: 其实就可以理解成函数指针 1. 保存自由函数 2.保存lambda表达式 1).std::function可以绑定到全局函数/类静态成员函数(类静态成员函数与全局函数没有区别)。 2).绑定到类的非静态成员函数,则需要使用std::bind。 关于std:: 阅读全文
posted @ 2015-01-04 13:54 南哥的天下 阅读(1891) 评论(0) 推荐(0)
摘要:在C/C++ 中天然的支持除10进制之外的三种进制的表示, 其前缀分别为: 1.二进制: 0b 2.八进制: 0 3.十六进制: 0x1.二进制 例: int x = 0b1001; // x = 9(32个bit,0b0000000000001001) 2.八进制 例:int y = 074; / 阅读全文
posted @ 2014-12-21 15:33 南哥的天下 阅读(1504) 评论(0) 推荐(0)
摘要:大家都知道,一个int 或 unsigned int是由4个字节组成的,(《C/C++学习指南》,第3章,第3.2.3节:变量的内存视图) 例如, int n = sizeof( int) ; // n为4 大家也能够清晰明白地看到内存里,那4个字节就在那,(《C/C++学习指南》,附录:VC200 阅读全文
posted @ 2014-12-17 13:27 南哥的天下 阅读(4000) 评论(0) 推荐(1)
摘要:关于这个基本的问题,很早以前就很清楚了,C标准中并没有具体给出规定那个基本类型应该是多少字节数,而且这个也与机器、OS、编译器有关,比如同样是在32bits的操作系统系,VC++的编译器下int类型为占4个字节;而tuborC下则是2个字节。 所以int,long int,short int的宽度都 阅读全文
posted @ 2014-12-14 22:19 南哥的天下 阅读(1248) 评论(0) 推荐(0)
摘要:C++居然能用父类指针(里面存的也是父类)调用子类(子类独有的)函数? c++ 昨天问另外一个问题的时候, 今天早上有人回复给出了这样一段代码, 我试着运行了一下, 结果却大大出乎我的意料 : class Father { public: virtual void func1() { std::co 阅读全文
posted @ 2014-11-20 16:13 南哥的天下 阅读(1084) 评论(0) 推荐(0)
摘要:C++ STL 几个容器的底层实现 C++ STL 的实现: 1.vector 底层数据结构为数组 ,支持快速随机访问 2.list 底层数据结构为双向链表,支持快速增删 3.deque 底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(中间不能)快速增删,也支持随机 阅读全文
posted @ 2014-09-13 13:33 南哥的天下 阅读(1726) 评论(0) 推荐(0)
摘要:DLL编写中extern “C”和__stdcall的作用 动态链接库的使用有两种方式,一种是显式调用。一种是隐式调用。 (1) 显式调用:使用LoadLibrary载入动态链接库、使用GetProcAddress获取某函数地址。 (2) 隐式调用:可以使用#pragma comment(lib, 阅读全文
posted @ 2014-09-13 10:57 南哥的天下 阅读(23644) 评论(0) 推荐(1)
摘要:一、问题Extern的问题在于不知道这个关键词出现的时候到底是声明还是定义? 二、详解1、函数的声明extern关键词是可有可无的,因为函数本身不加修饰的话就是extern。但是引用的时候一样需要声明的。 2、全局变量在外部使用声明时,extern关键字是必须的,如果变量没有extern修饰且没有显 阅读全文
posted @ 2014-03-22 13:05 南哥的天下 阅读(1070) 评论(0) 推荐(0)