1.关于namespace用法及其应用:
由于在C++一些标准库中,存在命名冲突等问题,使得我们在自己使用变量时,遇到报错。但是我们又想使用我们自己的变量名,这时候就可以使用namesapce去限定一个使用的域,那么当我们再次使用变量时,可以对该变量进行限定。例如:
namespace obj{
int rand=1;
}
int main()
{
obj::rand+=1;//限定在obj的域内
rand+=1//此时会查询全局变量 锁定到内置库的rand 报错
return 0;
}
使用using 关键词可以将命名空间展开,常用于using namespace std 将标准库中的成员展开。
2.C++的输入\输出:
1)在<iostream>库中定义了输入\输出对象
2)cin为istream对象,cout为ostream的对象,二者为面向窄字符的标准输入输出流
3)我们可以把流想象成一种数据缓存,那么<<表示讲流中内容插入到console,可显示到屏幕上;>>表示流提取,可将键盘中输入的内容提\n'取到流中。
4)endl=='\n'=="\n"均表示换行
3.缺省参数:
1)缺省参数就是含有默认值的形参
2)缺省参数初始化为从右向左顺序
3)实参赋值给形参为从左向右的顺序
4.函数重载:
函数名相同,但是参数不同(包括参数的类型和参数的数量不同)的一些列同名函数构成重载。
5.引用:
1)引用是同一块内存的别名,引用一旦确定不可修改,引用传参,本质上是传地址,同一块内存可以有多个引用。
2)引用的实际作用:
引用作为返回值和传参时,可减少拷贝,提升效率;引用可简化程序,避免使用较为复杂的指针。
3)与const相关的用法:
引用被const修饰时,只能缩小权限,不能放大权限
const int a=10;
const int&ra=a;
//不能写成 int&ra=a,这样会使得a可以修改 权限被放大
int c=20;
int d=40;
const int&r=(c+d);
//不能写成int&r=(c+d),c+d会临时生成一个对象,临时对象具有常数性,不可被修改,所以要加const修饰
4)指针和引用的关系:
引用是别名,不开空间;指针是变量,要开空间
引用必须初始化,指针非必须初始化
引用初始化一个对象后,不可改变引用的对象;指针可随意改变指向的对象
sizeof引用为引用类型的大小,sizeof指针为地址大小,是一个常数
5)inline:
inline是对C语言宏函数的一种替代,编译器会将inline在调用处展开。
编译器会对Inline函数有选择性,只有代码短小且多次重复调用的情况下,编译器才会选择将其视作内联函数。
debug模式下,默认不展开内联函数。
内联函数不建议放在两个文件中,避免分离导致链接错误
6)nullptr:
由于C语言的NULL的定义为(void*)0,这使得某些情况下对0和空指针的界定不清,产生错误,C++采用nullptr规避这一问题。