目录
const
------------------------------------------------------------------------
类成员
const int a;
在构造函数中初始化化,可以使用初始化列表初始化
普通变量
- const 引用
const int & ra = a;
对变量a的常引用。
- const 指针
const char* p = "aaa"; //表示指针指向的元素值不可变
char* const rp = p; //表示指针本身不可变
类函数
int fun() const ;
const A a;
对象a只能调用常成员函数。
特殊知识
临时变量都默认为 const。
引用
------------------------------------------------------------------------
引用并不会创建新的变量,只是对原有变量的一个别名。
基本引用
int a;
int & ra = a;
引用在声明时必须初始化。ra 等同于 a,操作会相互影响。
const引用
int a;
const int & ra = a;
ra不能进行赋值等左值操作。
函数返回值引用
int fun (); //这个一般情况,函数会返回一个临时int变量。
int & fun2(); //返回引用值,不会新创建变量。
int a = fun2(); 和 int & ra = fun2() 都是正确的。
static
------------------------------------------------------------------------
修饰普通变量
修改存储区域和生命周期。
存储区域:静态区;声明周期:在运行main函数之前就已经初始化了,没有显示初始化就会默认初始化。
修饰普通函数
修改函数范围,仅在当前文件可以使用该函数。
修饰类成员变量
静态成员变量,仅有一个该变量所有类对象共用。
初始化:
int Student::m_total = 0;
静态成员变量在初始化时不能再加 static,但必须要有数据类型。被 private、protected、public 修饰的静态成员变量都可以用这种方式初始化。
extern
------------------------------------------------------------------------
在声明时修饰变量或者函数,时变量或函数可以全局使用。
变量声明之后需要初始化:
- “global.h” 中进行声明
extern int g_iInt;
extern void fun();
- "global.cpp"中进行初始化(文件名可以任意取,但是要包含上面那个头文件)
int g_iInt = 5;
void fun() { }
struct
------------------------------------------------------------------------
typedef struct myClass{
int i;
}S;
相当于
typedef struct myClass{
int i;
};
typedef struct myClass S;
decltype
------------------------------------------------------------------------
得到变量或者表达式的类型。
宏定义
------------------------------------------------------------------------
全局替换。
#define S(a,b) a*b
int i = S(2,3); -----> int i = 2*3;
sizeof()
------------------------------------------------------------------------
- sizeof 对数组,得到整个数组所占空间大小。
- sizeof 对指针,得到指针本身所占空间大小。
assert()
------------------------------------------------------------------------
断言,是宏,而非函数。assert 宏的原型定义在 <assert.h>
(C)、<cassert>
(C++)中,其作用是如果它的条件返回错误,则终止程序执行。可以通过定义 NDEBUG
来关闭 assert,但是需要在源代码的开头,include <assert.h>
之前。
assert() 使用
#define NDEBUG // 加上这行,则 assert 不可用
#include <assert.h>
assert( p != NULL ); // assert 不可用
TO BE CONTINUE......