C++对C的加强
1.命名空间
为了解决合作开发时的命名冲突问题,C++ 引入了命名空间(Namespace)的概念。
命名空间将全局作用域分成不同的部分
不同命名空间中的标识符可以同名而不会发生冲突
命名空间可以相互嵌套
全局作用域也叫默认命名空间
1)定义:
namespace 是C++中的关键字,用来定义一个命名空间,语法格式为:
namespace name
{
变量
函数
类
}
name是命名空间的名字,它里面可以包含变量、函数、类、typedef、#define 等,最后由{ }包围。
2)使用方法:
1.使用域解析符::
2.使用using声明
2.register关键字的改变
1、C++编译器有自己的优化方式,不使用register也可能做优化
2、C++中可以取得register变量的地址
3.struct类型加强
C语言的struct定义了一组变量的集合,C编译器并不认为这是一种新的类型
C++中的struct是一个新类型的定义声明
4.C++中所有变量和函数都必须要有类型
5.bool类型关键字
true代表真值,编译器内部用1来表示
false代表非真值,编译器内部用0来表示
bool类型只有true(非0)和false(0)两个值
C++编译器会在赋值时将非0值转换为true,0值转换为false
6.三目运算符的增强
在C++中,表达式返回的是变量本身
C++中三目运算符返回的是变量本身,所以可以作为左值使用
const关键字的改变
C语言中 const修饰的变量是一个 常变量,本质还是变量,有自己的地址空间
C++中 const 变量声明的是一个真正的常量,不是变量,所以编译器不会为该常量分配空间
const 修饰的常量会被放到 符号表 中
const 修饰的常量会被放到 符号表 中
C++的引用
概念:
1)引用作为其它变量的别名而存在,因此在一些场合可以代替指针
2)引用相对于指针来说具有更好的可读性和实用性
引用的本质:
引用在C++中的内部实现是一个常指针
Type& name ===> Type* const name
C++编译器在编译过程中使用常指针作为引用的内部实现,因此引用所占用的空间大小与指针相同。
从使用的角度,引用会让人误会其只是一个别名,没有自己的存储空间。这是C++为了实用性而做出的细节隐藏
常引用:
const & int e 相当于 const int * const e
普通引用 相当于 int *const e1
当使用常量(字面量)对const引用进行初始化时,C++编译器会为常量值分配空间,并将引用名作为这段空间的别名
使用字面量对const引用初始化后,将生成一个只读变量
C++对C的函数扩展
1.内联函数
C++中推荐使用内联函数替代宏代码片段
C++中使用inline关键字声明内联函数
内联函数声明时inline关键字必须和函数定义结合在一起,否则编译器会直接忽略内联请求。
tip:C++编译器不一定准许函数的内联请求
2.默认参数
C++中可以在函数声明时为参数提供一个默认值,
当函数调用时没有指定这个参数的值,编译器会自动用默认值代替
3.占位参数
占位参数只有参数类型声明,而没有参数名声明
一般情况下,在函数体内部无法使用占位参数
4.函数重载
概念:
用同一个函数名定义不同的函数
当函数名和不同的参数搭配时函数的含义不同
判断标准:
函数重载至少满足下面的一个条件:
参数个数不同
参数类型不同
参数顺序不同