C++ 复习一
1.namespace 命名空间
1.1 用途:解决命名冲突
1.2 命名空间只能放在全局作用域下
1.3 命名空间可以嵌套,且随时可以添加新成员
1.4 命名空间可以匿名(static)并可以起别名
2.Using
2.1 using声明 using xxx::xxx1
2.1.1就近原则,需要避免二义性
2.2 using编译 using namespace xxx
2.2.1 有就近原则,优先就近原则
3.C++对于C的语言增强
3.1 全局变量检测增强
3.2 函数检测增强(返回值,调用时传参检测)
3.3 类型转换检测增强
3.4 C++ struct增强
3.4.1 C下必须声明struct关键字
3.4.2 C++结构体里可以写函数
3.5 C++下含有bool类型
3.6 三目运算符增强(a==b?a:b) C三目运算符返回值 c++返回的是变量
3.7 const增强(修改语法正确,全局运行报错)
3.7.1 C全局const不可以修改 局部的const可以间接修改
3.7.2 C++全局同上,局部运行通过,但修改不成功
3.7.3 C下const默认外部连接属性 c++默认内部连接属性(必须添加extern关键字提升作用域)
4.const内存分配
4.1 对const修饰的变量取地址时分配临时内存
4.2 const前加入extern关键字也会分配内存
4.3 使用变量初始化const修饰的变量(局部const int x=a 间接可以修改x)
4.4 对于自定义的数据类型,也会分配内存(局部分配内存的都可以间接修改)
5.尽量用const代替define
5.1 const有作用域,define不重视作用域(undefine卸载)
5.2 const有类型,可以进行安全检测
6.引用的使用(Type &别名 = 原名)
//本质是一个指针常量(type* const x )所以必须初始化
6.1 引用是给一个内存空间起别名
6.2 引用必须初始化,一旦初始化后不能修改其指向
6.3 不能返回局部变量的引用
6.4 如果函数的返回值是一个引用,可以用来做左值
6.5 通过引用可以简化指针(简化二级指针)
6.6 常量引用(const &a)的使用,修饰函数中的形参,防止误操作
7.参数传递(值传递不能修改参数本体)
8.内联函数inline
8.1 内联和宏一样,在特定位置展开,没有调用函数的开销(入栈出栈)以空间换时间
8.2 类内部的函数前面默认都有inline
8.3 加入内联函数只是对编译器的建议,可能不采用(太大,循环,过多判断,对函数取址),
好的编译器会将短小函数加入内联关键字
9.函数默认参数
9.1 函数参数列表中,某一个位置有默认参数,其从左到右都必须有默认参数
9.2 杉树的声明和实现只能有一个有默认参数
10.函数重载(c++编译器对函数名称作二次修饰)
10.1 作用域相同,函数名称相同,函数参数类型或个数或顺序不同(返回值不能作为重载条件)
10.2 函数重载遇到默认参数易发生二义性
10.3 引用(加const(int a=1;test(a))和不加(test(1))也可作为条件)
11.extern “C” 在c++下可以运行c(不能运行因为重载原因)
在C文件中加入
#ifdef __cplusplus
extern "C"{
#endf
........
#ifdef __cplusplus
}
#endf
12.类的封装(将属性和行为作为一个整体,表示生活中的事物)
12.1 类(class)默认权限private,而结构体(struct)默认public