C++/C
6plus
Java源码学习关注我的公众号: Plus技术栈
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
赋值运算符
对于赋值运算符正常需要考虑4点 1.传入参数是否是常量引用 2.返回类型是否是类的引用 3.是否释放自身已占的内存 4.是否考虑自赋值强开 对于异常安全性,正常赋值运算符如下 CMyString& CMyString::operator = (const CMyString &other) { if (this == &other) { return *原创 2017-08-14 10:56:32 · 307 阅读 · 0 评论 -
虚函数总结
1、静态函数不可以是虚函数因为静态成员函数没有this,也就没有存放vptr的地方,同时其函数的指针存放也不同于一般的成员函数,其无法成为一个对象的虚函数的指针以实现由此带来的动态机制。静态是编译时期就必须确定的,虚函数是运行时期确定的。 虚函数的主要意义在于多态(包括静态多态与动态多态,静态体现在模板方面,动态体现在虚函数方面),动态多态体现在动态绑定,然而构造时动态类型都没有完整。 虚函数的原创 2017-12-08 17:08:31 · 471 阅读 · 0 评论 -
基于c++11的100行实现简单线程池
背景刚粗略看完一遍c++ primer第五版,一直在找一些c++小项目练手,实验楼里面有很多项目,但是会员太贵了,学生党就只能google+github自行搜索完成项目了。注:本文纯提供自己的理解,代码完全照抄,有想法的欢迎评论留言一起讨论。本文参考: c++11线程池实现 A simple C++11 Thread Pool implementation 涉及到的c++11的特性: std::ve原创 2017-12-08 12:10:08 · 23345 阅读 · 11 评论 -
13.1.1 拷贝构造函数
Q:什么是拷贝构造函数? 一个构造函数的第一个参数是其自身类类型的引用,其任何参数都有默认值 class A{ public: A(); //默认构造函数 A(const A&); //拷贝构造函数 }; Q:为什么第一个参数前要加const ,为什么必须是引用 1.因为接受的参数几乎总是一个const的引用,且拷贝构造函数在某种情况下会被隐式使用(explicit),原创 2017-08-11 19:38:56 · 380 阅读 · 0 评论 -
13.1.2 拷贝赋值运算符
拷贝构造函数即构造某一类型,下面所示只是拷贝构造函数的声明,其定义形式 如:A::A(const A& test): a(test.a); class A{ public: A(); //默认构造函数 A(const A&); //拷贝构造函数 private: int a; }; 拷贝赋值运算符,即让两个类型相等 如: A a,b原创 2017-08-11 19:50:38 · 311 阅读 · 0 评论 -
13.1.1 析构函数
构造函数与析构函数都不对static(静态)变量起作用 class A{ ~A(); //析构函数 } 因为析构函数没有参数,所以不能被重载,所以一个类只存在一个析构函数 销毁类类型成员时(即一个类中的某个成员是类),调用该成员自己的析构函数,对于内置类型(例如Int) 析构时什么都不用做 Q:析构顺序? 构造函数按成员在类中的出现顺序初始化 析构函数逆序 Q:原创 2017-08-11 20:06:02 · 279 阅读 · 0 评论 -
三五法则以及行为像值的类和行为像指针的类
转载链接:http://blog.youkuaiyun.com/ysayk/article/details/51056431#comments 文章作者:XDmonkey 首先我们说明有三个基本操作可以控制类的拷贝操作:拷贝构造函数、拷贝赋值运算符(这两个的区别之前有文章讲到)、以及析构函数。 那么我们什么时候需要自己构建拷贝构造函数和重载拷贝赋值运算符呢,在三/五法则中给出了自转载 2017-08-12 19:32:47 · 608 阅读 · 0 评论 -
k++与++k的总结
k++的执行过程是: 1.首先返回k的值,这个值是个常量。 2.然后创建一个临时量temp,将常量值赋给这个临时量,temp=常量,返回临时量temp 。 3.最后将k自增1 ++k的执行过程: 1.首先将k自增。2.然后将k返回 所以++k的执行速度比k++快 k++是右值,++k是左值原创 2017-09-10 21:48:41 · 25366 阅读 · 1 评论 -
源码到可执行文件过程
1.c++中,声明const int i,是在编译做到 i只可读的 2.由多个源文件组成的C程序,经过编辑、预处理、编译、链接等阶段会生成最终的可执行程序。链接阶段可以发现被调用的函数未定义 解析:const用来说明所定义的变量是只读的。 这些在编译期间完成,编译器可能使用常数直接替换掉对此变量的引用。 源代码到可执行文件的过程 源代码-->预处理-->编译-->优化-->汇编--原创 2017-08-15 20:20:47 · 465 阅读 · 0 评论 -
c++指针中0,NULL和nullptr
转载地址:史上最明白的 NULL、0、nullptr 区别分析 C的NULL 在C语言中,我们使用NULL表示空指针,也就是我们可以写如下代码: int *i = NULL; foo_t *f = NULL; 实际上在C语言中,NULL通常被定义为如下: #define NULL ((void *)0) 也就是说NULL实际上是一个void *的指针转载 2017-08-31 12:44:02 · 1932 阅读 · 0 评论 -
c++ 宏、不可重载运算符、抽象类
1. 宏只是预定义的函数,在编译阶段不进行类型安全性检查,在编译的时候将对应函数用宏命令替换。对程序性能无影响 不能绝对的说宏会带来性能损失他是不确定的,要根据你使用的情况比如,调用函数式宏不需要入栈出栈,所以一般情况下,性能会提高点,但是如果使用不当,就会降低性能 宏可以做到函数无法做到的功能 2. C++中不能重载的运算符:“ ?: ”、 “ . ”、“ :: ”原创 2017-08-31 14:37:21 · 543 阅读 · 0 评论 -
多态
多态包含静态与动态两种,静态指编译时多态,动态指运行时多态 编译时多态:在c++中主要体现在函数模板中 函数重载与编译时多态无关。多态举例: template T add(T x,T y){ T c=x+y; return c; } 运行时多态:主要体现在虚函数中 子类覆盖或者改写父类中的成员函数。如: #include using namespace s原创 2017-08-31 19:38:13 · 295 阅读 · 0 评论 -
sizeof的使用
Sizeof的作用非常简单:求对象或者类型的大小。然而sizeof又非常复杂,它涉及到很多特殊情况,本篇把这些情况分门别类,总结出了sizeof的10个特性: (0)sizeof是运算符,不是函数; (1)sizeof不能求得void类型的长度; (2)sizeof能求得void类型的指针的长度; (3)sizeof能求得静态分配内存的数组的长度! (4)sizeof转载 2017-08-31 19:54:56 · 675 阅读 · 0 评论 -
类型转换
算术转换:把一种算术类型转换成另一种算术类型。运算符的运算对象将转换成最宽的类型,题中最宽的是double类型8字节,所以结果是double。 其他几种转换情况: 1、整型提升:把小整数类型转换成较大的整数类型。其中布尔值false提升为0、true提升为1; 2、无符号类型的运算对象: 如果一个运算对象是无符号类型、另一个是带符号类型原创 2017-08-31 20:11:53 · 393 阅读 · 0 评论 -
C++类中的内存对齐
转载地址:C++类中的内存对齐 对齐规则 在没有#pragma pack宏的情况下: 1.数据成员对齐规则:struct, union的数据成员,第一个数据成员放在offset为0的地方,之后的数据成员的存储起始位置都是放在该数据成员大小的整数倍位置。如在32bit的机器上,int的大小为4,因此int存储的位置都是4的整数倍的位置开始存储。 2.结构体转载 2017-09-02 15:06:14 · 380 阅读 · 0 评论 -
signed转换至unsigned(关于符号扩展)
首先明确基础知识 char 和 bool 是1个字节 float 和 int 是4个字节 double是8个字节 32/64位系统只和指针的字节数有关,不影响int这些类型的大小 指针即地址,32=4*8,一个字节(bit)8byte,所以一个32位系统指针是4字节 给定一个变量,例如char a=-1,红色为最高位,符号位 其signed形式:10000001 则其unsig原创 2017-09-04 17:13:01 · 1154 阅读 · 0 评论
分享