1.bool类型,值取true和false.
2.const 常量标识符
//const int a; // error,常量必须初始化 const int a = 100; // a = 200; // error,不能对常量赋值
const int * p // 定义了一个指向常量的指针变量(*p是常量)
int * const p2 = &a; // p2是常量,需初始化
/* const常量与#define定义的符号常量的区别
* 1.const定义的常量有类型,而#define定义的没有类型,编译可以对前者进行安全检查,对后者只是 * 做简单替换
* 2.const常量在编译时分配内存,#define定义的在预编译进行替换,不分配内存
* 3.作用范围不同,前者作用域为变量的作用域,后者从定义点到程序结束(也可用#undef取消)
*/
// 尽量用const、enum代替#define
3.内存对齐
- 是什么:1.编译器为每个“数据单元”安排在某个合适的位置上. 2.c,c++允许干涉内存对齐
- 为什么:在对齐的内存空间上能更快的访问数据
- 怎么用:
4.域运算符::
// 用法1:对与局部变量同名的全局变量进行访问 #include <iostream> using namespace std; int var = 100; int main() { int var = 50; cout << var <<endl; // 50 cout << ::var << endl; // 100 }
5.new与delete
- new用于创建堆空间,成功返回首地址, 用法:
- delete 释放堆空间
// new:分配内存,调用构造函数 int *p; p = new int; char *p_str = new char[50]; // delete:调用析构函数,释放内存 delete [] p_str; delete p;
6.重载:函数名相同,参数不同(数量,类型,顺序)
7.引用:
- 就是给一个变量起别名(引用不是变量,只是变量的别名)
int a = 100; int &b = a; // b是a的别名
b = 200;
cout << b <<" " << a << endl; // 200 200 - 引用没有自己的空间
- 对引用的改变相当于对原变量的改变