C++命名空间 缺省参数 函数重载 引用 内联函数复习笔记

命名空间
    对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的
    命名空间可以嵌套,同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成到同一个命名空间中
    一个命名空间就定义了一个作用域,命名空间中的所有内容都局限于该命名空间中

缺省参数
    声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则默认值,否则使用指定的实参。
    半缺省参数必须从右往左依次来提供,不能间隔着给出
    缺省参数不能同时在函数声明和定义中出现,缺省值只在声明中出现
    缺省值必须是常量或者全局变量
    C语言不支持

函数重载
    同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表必须不同,用来处理实现功能类似数据类型不同的问题

名字修饰(name mangling)
    程序的几个阶段:预处理、编译、汇编、链接
    name mangling 是一种在编译过程中,将函数、变量的名称重新改编的机制,简单来说就是编译器为了区分各个函数,将函数通过一定算法,重新修饰为一个全局唯一的名称
    C语言的名字修饰规则非常简单,只是在函数名字前面添加了下划线。所以不支持函数重载
    C++中被修饰后的名字中包含了:函数的名字和参数类型。所以支持函数重载
    extern "C": 告诉编译器,将该函数按照C语言规则编译

引用
    给已存在的变量取一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。
    注意:引用类型必须和引用实体是同种类型的
    引用特性:
        引用在定义时必须初始化
        一个变量可以有多个引用
        引用一旦引用一个实体,再不能引用其他实体
        注意:不能返回栈空间上的引用

引用和指针的区别:
    引用在定义时必须初始化,指针没有要求
    引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何一个类型实体
    没有null引用,但有null指针
    sizeof中含义不同
    自增运算含义不同
    有多级指针,没有多级引用
    访问实体方式不同,指针需要显式解引用,引用是编译器自己处理
    引用比指针安全

内联函数
    以inline修饰的函数叫内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销,提升运行的效率
    特性:
        以空间换时间,省去调用函数的开销,代码很长或者有循环/递归的函数不适宜用内联函数
        inline对于编译器只是一个建议,编译器会自动优化,如果定义为inline的函数体内有循环/递归等,编译器优化时会忽略掉内联

宏的优缺点 
    优点:
        增强代码的复用性
        提高性能
    缺点:
        不方便调试宏(因为预编译阶段进行了替换)
        导致代码可读性差,可维护性差,容易误用
        没有类型安全的检查
    C++有哪些技术替代宏
        常量定义 换用const
        函数定义 换用内联函数
        类型重定义 换用typedef
    

你可能感兴趣的:(C/C++)