1、命名空间
命名空间的作用是为了解决“命名冲突”。
命名空间可以理解为标识符的作用范围,比如cout,cin,endl等都是在std命名空间中的标识符,当using namespace std使用std这个命名空间之后,就可以自由的使用其中的任何标识符,否则,只能用std::count来使用。
无名命名空间只作用于当前文件,主要是保持代码的局部性。
命名空间中还可以继续定义命名空间。命名空间中的标识符可以分为内部定义和外部定义,即声明在内,定义可内可外。
2、typedef &define
命名空间的作用是为了解决“命名冲突”。
命名空间可以理解为标识符的作用范围,比如cout,cin,endl等都是在std命名空间中的标识符,当using namespace std使用std这个命名空间之后,就可以自由的使用其中的任何标识符,否则,只能用std::count来使用。
无名命名空间只作用于当前文件,主要是保持代码的局部性。
命名空间中还可以继续定义命名空间。命名空间中的标识符可以分为内部定义和外部定义,即声明在内,定义可内可外。
2、typedef &define
typedef是编译的一部分,而define只是简单的宏展开,也就是替换。推荐使用typedef。下面有一个用法。
定义函数指针,typedef int (*funcptr)(); 这个的意思是:定义一个返回值为int,不带参数的函数指针,就是说funcptr 是 int (*)()型的指针funcptr table[10];定义一个数组,这个数组是funcptr类型的。就是说这个数组内的内容是一个指针,这个指针指向一个返回值为int,不带参数的函数
3、template类模板,函数模板,用法template<typename T>,然后在函数或者类里用T当作一个类型替换,这样可以对相同功能的函数(参数不同)进行归一,节省了空间也更加易于阅读。
还有一种叫模板显示特例化,用法template<> class<int>::function(),说明,当用int来特例化class对象时,这个类就拥有了一个函数function,其他类型特例化的class对象不能调用这个函数。