C++学习
文章平均质量分 51
specterofblog
C/C++、Golang、Java、Android。底层系统开发,linux嵌入式开发,区块链开发,小小程序猿一枚
展开
-
C++ 宏定义 #define 和常量 const 的区别
宏定义 #define 和常量 const 的区别类型和安全检查不同宏定义是字符替换,没有数据类型的区别,同时这种替换没有类型安全检查,可能产生边际效应等错误;const常量是常量的声明,有类型区别,需要在编译阶段进行类型检查编译器处理不同宏定义是一个"编译时"概念,在预处理阶段展开,不能对宏定义进行调试,生命周期结束与编译时期;const常量是一个"运行时"概念,在程序运...原创 2019-10-31 19:41:58 · 440 阅读 · 0 评论 -
C++智能指针实现和问题
Share_ptr实现原理智能指针是什么简单来说,智能指针是一个类,它对普通指针进行封装,使智能指针类对象具有普通指针类型一样的操作。具体而言,复制对象时,副本和原对象都指向同一存储区域,如果通过一个副本改变其所指的值,则通过另一对象访问的值也会改变.所不同的是,智能指针能够对内存进行进行自动管理,避免出现悬垂指针等情况。普通指针存在的问题C语言、C++语言没有自动内存回收机制,关...原创 2019-08-09 13:54:22 · 213 阅读 · 0 评论 -
new 对象加括号和不加括号的区别
在new对象的时候有加上(),有不加(),不知道这个到底是什么区别?比如:CBase *base = new CDerived();CBase *base = new CDeviced;很多人都说,加括号调用没有参数的构造函数,不加括号调用默认构造函数或唯一的构造函数。这是有问题的。对于自定义类类型:如果该类没有定义构造函数(由编译器合成默认构造函数)也没有虚...转载 2019-07-10 10:50:01 · 1099 阅读 · 0 评论 -
浅谈 C++ 中的 new/delete 和 new[]/delete[]
参考链接:https://blog.csdn.net/hazir/article/details/21413833转载 2019-04-19 11:44:34 · 207 阅读 · 0 评论 -
C++模板深度解析
引子在C++发明阶段,C++之父Stroustrup和贝尔实验室的C++小组对原先的宏方法进行了修订,对其进行了简化并将它从预处理范围移入了编译器。这种新的代码替换装置被称为模板,而且它变现了完全不同的代码重用方法:模板对源代码重用,而不是通过继承和组合重用对象代码。当用户使用模板时,参数由编译器来替换,这非常像原来的宏方法,却更清晰,更容易使用。模板使类和函数可在编译时定义所需处理和返回...转载 2019-04-19 11:37:41 · 306 阅读 · 0 评论 -
C++类模板声明头文件和实现文件不能分离原因
C++中每一个对象所占用的空间大小,是在编译的时候就确定的,在模板类没有真正的被使用之前,编译器是无法知道,模板类中使用模板类型的对象的所占用的空间的大小的。只有模板被真正使用的时候,编译器才知道,模板套用的是什么类型,应该分配多少空间。这也就是模板类为什么只是称之为模板,而不是泛型的缘故。既然是在编译的时候,根据套用的不同类型进行编译,那么,套用不同类型的模板类实际上就是两个不同的类型,也就...转载 2019-04-19 11:22:42 · 663 阅读 · 0 评论 -
C++模板中Class和Typename区别
模板中使用class和typename的区别还没翻几页,当看到这段代码的时候就楞了一下。印象中上次也是看到这里一下子没弄懂,还特地搜索过的。结果再来一遍的时候还是忘了。果然好记性不如烂笔头,赶紧写篇博客mark一下。这里讲的是作者在声明模板的时候使用typename而不是class。一般情况下,使用typename或者class只是编码风格的问题。但是在遇到从属类型(dependent t...转载 2019-04-18 18:11:04 · 803 阅读 · 0 评论 -
C++类中静态成员使用总结
在C++中,静态成员是属于整个类,而不是某个对象的,静态成员变量只存储一份供所有对象共有。所以在所有对象中都可以共享它。使用静态成员变量实现多个对象之间的数据共享不会被破坏隐藏的原则,保证了安全性还可以节省内存。静态成员的定义或者声明要加个关键字static。静态成员可以通过双冒号来使用即<类名>::<静态成员名>使用总结如下1. 不能通过类名调用类的非静态成员函数...转载 2019-01-14 13:19:41 · 627 阅读 · 0 评论 -
C++中Public Static和Private Static区别
Static:静态成员的关键字,表示不能实例化,在你运行的时候他自己已经在内存中开辟了块空间,所以不用new, 可以直接调用。类似全局变量。 特点: 1、访问static成员,用类而不是实例化的对象; 2、static方法只能访问static属性; 3、static成员可以保留其值Private Static & Public Staticprivate static:...转载 2019-01-14 12:58:38 · 9375 阅读 · 2 评论 -
static_cast、dynamic_cast、const_cast、reinterpret_cast详解
C++中的类型转换分为两种:隐式类型转换; 显式类型转换。而对于隐式变换,就是标准的转换,在很多时候,不经意间就发生了,比如int类型和float类型相加时,int类型就会被隐式的转换位float类型,然后再进行相加运算。而关于隐式转换不是今天总结的重点,重点是显式转换。在标准C++中有四个类型转换符:static_cast、dynamic_cast、const_cast和reinterp...转载 2018-11-05 13:23:21 · 743 阅读 · 0 评论 -
为什么父类指针可以指向子类,子类指针不能指向父类
class Base{public: int aa};class Child :public Base{ public: int bb;}通过内存来查看数据:Base是:---------||占一个int数据大小--||----(aa 数据)----||---------而Child则是:---------|---------|占一个int数...原创 2018-11-05 11:22:49 · 6268 阅读 · 1 评论 -
C++虚函数表的深入理解
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不做过多的...转载 2018-10-17 18:14:19 · 258 阅读 · 0 评论 -
C++ Boost Signal2 Connection信号与槽函数使用例程
signals2基于Boost的另一个库signals,实现了线程安全的观察者模式。在signals2中,观察者模式被称为信号/插槽(signals and slots),它是一种函数回调机制,一个信号关联了多个插槽,当信号发出时,所有关联它的插槽都会被调用。下面就通过小案列来实现signal的使用#include <iostream>#include <boost\...转载 2018-10-16 09:46:03 · 1659 阅读 · 0 评论 -
C++中bind函数的用法
bind是这样一种机制,它可以预先把指定可调用实体的某些参数绑定到已有的变量,产生一个新的可调用实体,这种机制在回调函数的使用过程中也颇为有用。C++98中,有两个函数bind1st和bind2nd,它们分别可以用来绑定functor的第一个和第二个参数,它们都是只可以绑定一个参数。各种限制,使得bind1st和bind2nd的可用性大大降低。C++0x中,提供了std::bind,它绑定的参数的...转载 2018-08-17 14:58:30 · 5803 阅读 · 1 评论