初识C++
C++关键字
命名空间
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的 成员。
C++输入&输出
cin //输入
cout //输出
//使用cout输出和cin输入时,必须包含< iostream >头文件#include <iostream> using namespace std; int main() { int a; double b; cin>>a; cin>>b; out<<a<<endl; cout<<b<<" "<<endl; return 0; }
缺省参数
声明或定义函数时为函数的参数指定一个默认值
- 全缺省参数
void TestFunc(int a = 10, int b = 20, int c = 30)
- 半缺省参数
从右往左依此提供,不能间隔
void TestFunc(int a, int b = 10, int c = 20)
缺省参数不能同时出现在函数声明和定义中
当声明与定义分离时,只能在声明中出现
当声明与定义一体时,在定义中出现函数重载
- 函数重载概念
函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,
这些同名函数的形参列表(参数个数、类型、顺序)必须不同,
常用来处理实现功能类似数据类型不同的问题int Add(int left, int right) double Add(double left, double right)
- 名字修饰(name Mangling)
在C/C++中,一个程序要运行起来,需要经历以下几个阶段:预处理、编译、汇编、链接。
Name Mangling是一种在编译过程中,将函数、变量的名称重新改编的机制,简单来说就是编译器为了区分各个函数,将函 数通过一定算法,重新修饰为一个全局唯一的名称。
- extern “C”
有时候在C++工程中可能需要将某些函数按照C的风格来编译,在函数前加extern "C",意思是告诉编译器,将该函数按照C语言规则来编译。
extern "C" int Add(int left, int right);
引用
引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。
特性:
1. 引用在定义时必须初始化
2. 一个变量可以有多个引用
3. 引用一旦引用一个实体,再不能引用其他实体引用和指针的区别
1. 引用在定义时必须初始化,指针没有要求
2. 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何一个同类型实体
3. 没有NULL引用,但有NULL指针
4. 在sizeof中含义不同:引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32位平台下占4个字节)
5. 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小
6. 有多级指针,但是没有多级引用
7. 访问实体方式不同,指针需要显式解引用,引用编译器自己处理
8. 引用比指针使用起来相对更安全内联函数
以inline修饰的函数叫做内联函数
特性:
1. inline是一种以空间换时间的做法,省去调用函数额开销。所以代码很长或者有循环/递归的函数不适宜使用作为内联函数。
2. inline对于编译器而言只是一个建议,编译器会自动优化,如果定义为inline的函数体内有循环/递归等等,编
译器优化时会忽略掉内联。CentOS中g++的下载安装
打开终端,进入root
输入yum install gcc-g++
进行下载安装,安装成功之后可以输入which g++查看g++所在位置,一般在/usr/bin目录下【面试题】
宏的优缺点?
优点:
1.增强代码的复用性。
2.提高性能
缺点:
1.不方便调试宏。(因为预编译阶段进行了替换)
2.导致代码可读性差,可维护性差,容易误用。
3.没有类型安全的检查