摘要: GC(垃圾收集garbage collection) 垃圾收集器是一种动态存储分配器,它自动释放程序不再需要的已分配的块,这些块也称为垃圾。在程序员看来,垃圾就是不再被引用的对象。自动回收垃圾的过程则称为垃圾收集(garbage collection)。在一个支持垃圾收集的语言中,程序显式地申请内存 阅读全文
posted @ 2021-09-01 20:00 默行于世 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 常量折叠 常量折叠:在编译器里进行语法分析的时候,将常量表达式计算求值,并用求得的值来替换表达式,放入常量表,可以算作一种编译优化,但是变量的名称是有效范围内还是可用的,并且在编译的时候从常量表中的直接替换,并不涉及到该变量的内存地址。 可折叠的常量像宏一样,在预编译阶段对常量的引用一律被替换为常量 阅读全文
posted @ 2021-09-01 19:57 默行于世 阅读(518) 评论(0) 推荐(0) 编辑
摘要: 1) 在C++11中所有的值必属于左值、右值两者之一,右值又可以细分为纯右值、将亡值。在C++11中可以取地址的、有名字的就是左值,反之,不能取地址的、没有名字的就是右值(将亡值或纯右值)。 左值: 能够用&取地址的表达式是左值表达式。 例如:函数名和变量名(实际上是函数指针和具名变量,具名变量如s 阅读全文
posted @ 2021-09-01 19:23 默行于世 阅读(314) 评论(0) 推荐(0) 编辑
摘要: C++11的一大亮点就是引入了Lambda表达式。利用Lambda表达式,可以方便的定义和创建匿名函数。对于C++这门语言来说来说,“Lambda表达式”或“匿名函数”这些概念听起来好像很深奥,但很多高级语言在很早以前就已经提供了Lambda表达式的功能,如C#,Python,Objective-C 阅读全文
posted @ 2021-09-01 18:58 默行于世 阅读(55) 评论(0) 推荐(0) 编辑
摘要: C++ 11 标准中,除了可以沿用前面介绍的用法外,还为 for 循环添加了一种全新的语法格式,如下所示: for (declaration : expression){ //可迭代序列中的每个元素值会按序赋值给declaration中的变量,并存在拷贝或是引用的问题 } 其中,两个参数各自的含义如 阅读全文
posted @ 2021-09-01 18:28 默行于世 阅读(15) 评论(0) 推荐(0) 编辑
摘要: 众所周知,C语言使用NULL常量来表示空指针,为什么C++11还要增加新的nullptr来表示空指针呢? 1.我们首先查看NULL的定义: #if defined (_STDDEF_H) || defined (__need_NULL) #undef NULL /* in case <stdio.h 阅读全文
posted @ 2021-09-01 18:23 默行于世 阅读(43) 评论(0) 推荐(0) 编辑
摘要: auto C++11 赋予 auto 关键字新的含义,使用它来做自动类型推导。也就是说,使用了 auto 关键字以后,编译器会在编译期间自动推导出变量的类型。 注意:auto 仅仅是一个占位符,在编译器期间它会被真正的类型所替代。或者说,C++ 中的变量必须是有明确类型的,只是这个类型是由编译器自己 阅读全文
posted @ 2021-09-01 18:06 默行于世 阅读(1154) 评论(0) 推荐(0) 编辑
摘要: 1) 前置返回一个引用,后置返回一个对象 // ++i实现代码为: int& operator++(){ *this += 1; return *this; } 2) 前置不会产生临时对象,后置必须产生临时对象,临时对象会导致效率降低 //i++实现代码为: int operator++(int) 阅读全文
posted @ 2021-09-01 16:24 默行于世 阅读(52) 评论(0) 推荐(0) 编辑
摘要: 1) C++中的异常情况 语法错误(编译错误):比如变量未定义、括号不匹配、关键字拼写错误等等编译器在编译时能发现的错误,这类错误可以及时被编译器发现,而且可以及时知道出错的位置及原因,方便改正。 运行时错误:比如数组下标越界、系统内存不足等等。这类错误不易被程序员发现,它能通过编译且能进入运行,但 阅读全文
posted @ 2021-09-01 16:18 默行于世 阅读(38) 评论(0) 推荐(0) 编辑
摘要: 前言 0. 所谓泛型编程就是独立于任何特定类型的方式编写代码,使用泛型程序时,需要提供具体程序实例所操作的类型或者值。我们经常用到STL容器、迭代器、和算法都是泛型编程的例子; 模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数 阅读全文
posted @ 2021-09-01 16:15 默行于世 阅读(53) 评论(0) 推荐(0) 编辑
摘要: 重载(overload) 重载的定义为:在同一作用域中,同名函数的形式参数(参数个数、类型或者顺序)不同时,构成函数重载。例如: class A{ public: int func(int a); void func(int a, int b); void func(int a, int b, in 阅读全文
posted @ 2021-09-01 15:46 默行于世 阅读(910) 评论(0) 推荐(0) 编辑
摘要: 运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。你可以重定义或重载大部分 C++ 内置的运算符。例如 + 、 - 、 * 、 / 、++、--、>>、<<等,这样,你就能使用自定义类型的运算符。 基本原则 1、我们只能重载已有的运算符,而无权发明新的运算符;对于一 阅读全文
posted @ 2021-09-01 15:33 默行于世 阅读(33) 评论(0) 推荐(0) 编辑
摘要: 背景介绍 虚函数重写:子类重新定义父类中有相同返回值、名称和参数的虚函数; 非虚函重写:子类重新定义父类中有相同名称和参数的非虚函数; 父子间的赋值兼容:子类对象可以当作父类对象使用(兼容性);具体表现为: 1. 子类对象可以直接赋值给父类对象; 2. 子类对象可以直接初始化父类对象; 3. 父类指 阅读全文
posted @ 2021-09-01 15:11 默行于世 阅读(65) 评论(0) 推荐(0) 编辑
摘要: 动态联编与静态联编 1) 在C++中,联编是指一个计算机程序的不同部分彼此关联的过程。按照联编所进行的阶段不同,可以分为静态联编和动态联编; 2) 静态联编是指联编工作在编译阶段完成的,这种联编过程是在程序运行之前完成的,又称为早期联编。要实现静态联编,在编译阶段就必须确定程序中的操作调用(如函数调 阅读全文
posted @ 2021-09-01 10:59 默行于世 阅读(452) 评论(0) 推荐(0) 编辑