C++学习之路
文章平均质量分 78
学习C++高级编程
jekcai
这个作者很懒,什么都没留下…
展开
-
C/C++: new,delete 和 malloc,free的却别
C++ 中变量内存的分配分为堆栈(栈)和堆。堆栈(栈):在堆栈上分配的内存由程序自行进行管理,当变量超出作用域,标志着变量的生命周期结束,此时程序回收分配的内存。堆栈的生长方式是向上生长。堆:堆上的内存由程序员自行管理,分配内存的方式可以是C语言的malloc函数,也可以是C++语言中的new操作符。相对于堆栈,堆中分配的内存需要在变量生命周期结束的地方,由程序员手动回收分配的内存,回收方式可以是...原创 2018-05-08 17:58:45 · 200 阅读 · 0 评论 -
C++: 尽量使用const
const对象,在操作时会启用函数变量修改检查,所调用的函数中不可对变量值进行修改,这种检查操作在函数的每次调用中都会执行,但是采用const关键字限定的成员函数,在多次函数调用的过程中只会执行一次变量修改检查操作。const修饰的函数不可以修改类的成员变量,但是当成员变量被const成员函数返回后,可以被修改.Class String{Public: Char* text; Bool va...原创 2018-05-05 10:11:37 · 211 阅读 · 0 评论 -
C++: 一个语言联邦
C++由四部分组成:C语言,面向对象,模板(泛型编程),STL(模板程序库) 因此C++程序具有以上四个部分的特性。当采用C++的C语言部分时,函数参数传递分为,值传递,引用传递当采用C++面向对象部分时,函数参数的传递方式,建议采用常量引用传递。 C语言:区块,语句,预处理器,内置类型,数组,指针,没有模板,没有异常处理,没有重载面向对象:类,封装,继承,多态,动态绑定,…模板:泛型编程,编程范...原创 2018-05-05 10:19:54 · 346 阅读 · 0 评论 -
C++ : 尽量以const、enum、inline替换#define
使用cosnt替代#define的好处是,1. 当程序出现编译错误时,程序会给出出错的变量名。如果采用预处理宏,宏名在预处理时被预处理器替换掉,宏名无法进入到程序的字符表中,因此在程序报错时只会给出错误处的数值。2. 当程序采用const变量时,程序中只会存储此变量的一份存储,当采用宏定义时,程序中会出现多处存储。取地址的合法性:取const变量的地址址合法,取enum变量的地址不合法,取#d...原创 2018-05-05 10:42:28 · 294 阅读 · 0 评论 -
C++: 引用和移动语态
1. 引用:引用可以理解为变量的别名。(此处提到的变量既包括定义的局部变量,全局变量等,也包括程序中用到的临时变量,中间变量)提到引用就需要提到左值和右值的概率,这也是对变量的分类。左值和右值:故名思意,可以放在等号左边的变量叫做左值,书中的定义是可以获取其地址的一个量,个人认为这种定义不合适(常量可以取地址)。确切的说应该是可以放在等号左边被赋值的一个带有名称的量或者对象。书中给出右...原创 2018-05-05 10:53:37 · 249 阅读 · 0 评论 -
C++: const 和 constexpr 关键字
1. const 关键字,在读const关键字语句时,从右向左读取。cosnt int* p; 和 int const * p; 等价。 (常量指针):指向常量的指针,指针指向的内容不可修改为常量,指针可以修改。例如 const int* p = new int[10];int* const p; (指针常量):指针常量,指针本身为常量,指针本身无法修改其指向的地址,地址内的内容可以改...原创 2018-05-05 10:56:57 · 380 阅读 · 0 评论 -
C++: 工程的编译过程中的内部链接和外部链接
文件的创建和编译:C++工程在编译的过程中,每个cpp文件单独编译,编译生成的目标文件彼此链接,其中包含的函数和全局变量默认情况下都存在外部链接和内部链接(也称为静态链接)。因此其他源文件中可以使用本源文件中的变量和函数。取消外部链接的方法,使用内部链接,可以使用Static关键字,或者采用匿名命名空间, namespace{ … }。添加外部链接可以使用extern关键字,此关键字只是对变量的声...原创 2018-05-05 11:04:10 · 418 阅读 · 0 评论 -
C/C++: 程序编译流程
1.预处理预处理相当于根据预处理指令组装新的C/C++程序。经过预处理,会产生一个没有宏定义,没有条件编译指令,没有特殊符号的输出文件,这个文件的含义同原本的文件无异,只是内容上有所不同。读取C/C++源程序,对其中的伪指令(以#开头的指令)进行处理①将所有的“#define”删除,并且展开所有的宏定义②处理所有的条件编译指令,如:“#if”、“#ifdef”、“#elif”、“#else”、“e...原创 2018-05-05 11:11:39 · 332 阅读 · 0 评论 -
C++: 矩阵操作
在原作的基础上添加对矩阵扩充的支持:void insert(unsigned row, unsigned col, TYPE const& value);matrix.h :/*****************************************************************************//* Name: matrix.h ...原创 2018-05-05 11:28:40 · 1293 阅读 · 1 评论 -
C++: 类型转换
const_cast: 消除变量的常量属性,将常量赋值给变量后可进行修改,可以消除常量指针和常量引用。 static_cast: 显示的类型转换,C语言中的强制类型转换可以用此代替,但是不执行类型安全检查,支持所有有意义的类型转换。 reinterpret_cast: 重定义类型转换,可以将两个毫无关系的类型实现类型间转换,但通常不建议这么做,可能一些编译器不支持,通常的方式是,将其他类型转换成v...原创 2018-05-05 09:51:51 · 111 阅读 · 0 评论 -
C++ : 编程重定义错误
C++ 编程重定义错误: 错误1:所编译的函数实现,已经在目标程序.obj文件中出现。错误原因:包含的头文件中出现了实现部分的代码,或者在头文件尾部包含了对应的.cpp文件。解决方法:将程序的声明和定义(实现)严格区分开,将声明存放操.h、.hpp文件中,将实现存放到.cpp文件中。因为.cpp文件是单独分开编译,如果头文件被多处引用可能导致实现部分被重复包含到不同的.cpp文件中,从而导致多重编...原创 2018-04-20 14:57:57 · 1790 阅读 · 0 评论