一.关键字:63个
命名空间目的使对标识符的名称本地化,避免命名冲突和命名污染,一个命名空间定义了一个 新的作用域
namespace N1 { }
可嵌套
使用: 1. printf("%d",N1::a) 2.using N1::a; printf("%d",a); {命名成员的引入}
3. using namespace N1; {命名 空间的引入}
二.半缺省函数从右往左给出,从左往右匹配
缺省值必须是常量或全局变量
三.函数重载
同名函数的形参列表必须不同(参数个数,类型,顺序)
函数值仅返回值不同,不能构成重载
无参函数与同名的全缺省参数不能共存
a.c->a.obj(编译)(按照语法对代码检测)->a.exe(链接)
四.引用 类型&引用变量名(对象名)=引用实体
给已经存在变量取一个别名,和引用的变量公用一块内存空间(引用类型和引用实体相同)
一个变量可以有多个引用;
1.做参数
1) 需要通过形参改变外部实参 T&
2)不需要 const T&
2.做返回值 离开作用域后,栈上空间还给系统了,故不能用栈上空间作为引用类型返回
在语法概念上,引用是一个别名,无独立空间;在底层实现上实际上有空间的,因为引用是按指针方式实现的
引用和指针不同点:
1.引用在定义时必须初始化
2.引用引用一个实体后,不能再引用其他实体;指针可以指向任何一个同类型的实体
3.无NULL引用,引用自加是实体增加1
4.sizeof中,引用结果是引用类型的大小
5.访问实体不同,指针需要显示解引用,引用编译器自己处理
6.引用比指针相对更安全
内联函数: inline修饰的函数, 编译时(会进行类型检测),C++编译器在调用内敛函数的地方展开,无函数压栈开销,
以空间换时间,故代码很长或循环/递归的函数不适合(若有,编译器优化时会忽略掉内联)
声明和定义不分开,分离会导致链接错误,因为inline被展开,就没有函数地址了
宏的优缺点(预处理)
优点:增强代码复用性; 提高性能
缺点:不方便调制宏(在预编译阶段进行了替换)
代码可读性差,可维护性差,容易误用
C++那些技术代替宏
常量定义换用 const(编译期间已被替换)
函数定义换用内联函数
五.auto 在C++11中,声明的变量由编译器在编译时推导而得
auto定义变量时必须初始化(占位符)
指针时auto auto*无区别,引用时必须用auto&
在同一行声明多个变量时,变量类型必须相同
auto 不能作为函数的参数,用来声明数组
范围for:由冒号分为两部分,第一部分用来迭代的变量,第二部分表示被迭代的范围
for(auto e: array) for(auto& e: array) 修改数组中的内容加&,不修改不需要加
nullptr代表一个指针空值常量