定义
namespace 空间名 {//成员}
使用
作用域限定符(::)using引入命名空间成员using namespace引入命名空间命名空间可以嵌套同一个工程可以存在多个相同名称的命名空间,编译器最后会合成同一个命名空间同一作用域中,函数名相同,参数个数或类型或顺序不同
名字修饰
C:在函数名前添加下划线C++:重新修饰的名字包含函数名即参数类型如果函数需要用C风格来编译,在函数前加extern "C"以inline修饰的函数为内联函数,编译时C++编译器在调用内联函数的地方展开
特性
inline是空间换时间的做法,所以代码很长或者有循环递归的函数不适合使用inline对编译器只是一种建议inline不建议声明和定义分离,分离会导致链接错误缺省参数是声明或定义函数时为函数的参数制定一个默认值,调用该函数时,如果没有实参则采用该默认值,否则使用实参
分类
全缺省参数半缺省参数:必须从右往左依次给出,同时不能在声明和定义中同时出现给已定义的变量取一个别名,编译器不会为引用变量开辟内存空间,它和它的引用变量共用一块内存空间,但是在底层是有空间的,因为引用是按照指针方式来实现的
使用方法
类型& 引用变量名 = 引用实体;引用类型和引用实体必须是同类型特性
引用在定义时必须初始化一个变量可以有多个引用引用只能引用一个实体常引用
使引用变量只具有读属性
使用场景
参数返回值:不能用栈上空间作为引用类型返回,返回值的生命周期必须不受函数限制引用和指针在作为参数和返回值类型效率几乎相同引用和指针的区别
引用在定义时必须初始化,指针无要求引用只能引用一个实体,指针可在任何时候指向同一类型的实体没有NULL引用,但有NULL指针sizeof:引用结果为引用类型大小,指针始终是地址空间所占字节个数引用的自加即引用实体的自加,指针的自加是向后偏移一个类型大小有多级指针,无多级引用访问实体方式不同,引用编译器处理,指针需显式解引用引用使用比指针相对安全特性
使用auto定义变量必须进行初始化,编译器根据初始化表达式推导auto的实际类型auto不是类型的声明,而是类型声明时的占位符,编译器在编译时会将auto替换为变量实际类型避免与C++98混淆,C++11只保留auto作为类型指示符的用法使用场景
结合指针和引用:auto声明指针类型时auto和auto*无区别,但用auto声明引用类型必须加&同一行定义多个变量:这些变量必须是相同类型,否则编译会报错,因为编译器只对第一个类型而推导出其他变量的类型范围for循环lambda表达式范围for循环
for(auto e : array),":"前面部分为迭代变量,后面为迭代范围for循环的范围必须是确定的迭代对象要实现++和==操作不能使用场景
不能作为函数的参数不能声明数组不能定义类的非静态成员变量实例化模板时不能使用auto作为模板参数