在你学习C++之前,不妨先来学学C++基础。
在刚学习C++的小伙伴会发现,在敲代码之前都要在前面加上 using namespace std;
这到底是为什么呢,其实这个过程就是在使用std这个命名空间,因为C++库里面的东西全是包含在std这个命名空间中的,如果我们想要使用C++库里面的东西,就是用到std这个命名空间。
命名空间的使用有 三种方法。
直接在全局引用std库。这种方法可以直接将C++库里面的东西全用上,以后在想用C++库时,不在需要特定的引用。但同时可能会带来麻烦,如果我们自己定义的变量与库冲突时,可能会出现问题。
- #include
-
- using namespace std;
-
- int main()
- {
- cout << "hello world" << endl;
- return 0;
- }
当我们需要频繁使用时,在单独的引用出来。
- #include
-
- using std::cout;
- using std::endl;
-
- int main()
- {
- cout << "hello world" << endl;
- return 0;
- }
在使用时,在单独引用出来。
- #include
-
- int main()
- {
- std::cout << "hello world" << std::endl;
- return 0;
- }
同样的,我们也可以定义自己的命名空间。
- #include
-
- using namespace std;
-
- namespace calculator
- {
- int a = 10;
- int Add(int x, int y)
- {
- return x + y;
- }
- }
-
- using namespace calculator;
-
- int main()
- {
- int sum = Add(10, 20);
-
- cout << sum << " " << a << endl;
-
- return 0;
- }
如上所示,calculator就是我们自己定义的命名空间。
缺省参数就是函数在声明和定义的时候可以为函数缺省一些参数,其中可分为全缺省和半缺省。
函数在声明和定义的时候全部参数都缺省
- #include
-
- using namespace std;
-
- int Add(int x = 0, int y = 0, int z = 0)//缺省了x,y,z
- {
- return x + y + z;
- }
-
- int main()
- {
- int sum = Add();
- cout << sum << endl;
-
- int sum1 = Add(1, 3);
- cout << sum1 << endl;
-
- return 0;
- }
全缺省参数就函数传参的时候,可以一个都不传,不传的参数会默认使用缺省的参数。
函数在声明的定义的时候只缺省部分参数。
- #include
-
- using namespace std;
-
- int Add(int x , int y=0, int z=0)
- {
- return x + y + z;
- }
-
- int main()
- {
- int sum = Add(10, 2);
- cout << sum << endl;
- return 0;
- }
重点!!!
对于半缺省参数,函数的参数只能从右往左缺省,不能从左往右缺省。
int Add(int x=0 , int y, int z) { return x + y + z; }上面这种写法时错误的。
同时,在进行函数传参的时候,参数只能从左往右依次传,不能中间空位置。
int sum = Add(10, , 3);上面这种写法时错误的。
函数重载,即在同一作用域中,允许函数同名,但是要求同名的函数的参数 要 类型不同or个数不同or顺序不同,返回值不做要求。
- #include
-
- int Add(int x, int y)
- {
- return x + y;
- }
-
- int Add(double x, double y)//类型不同
- {
- return x + y;
- }
-
- int Add(double x, double y, double z)//个数不同
- {
- return x + y + z;
- }
-
-
- void Add(int i, char a)
- {
- ;
- }
-
- void Add(char a, int i)//顺序不同
- {
- ;
- }
-
- int main()
- {
- return 0;
- }
引用就是给已存在的变量重新起一个别名。

在上面的代码中,我们先创建了一个变量a,在给变量a起了个别名ra,通过输出他们的地址可以看到,他们其实指的都是同一块空间。
引用的特性
1.引用在定义时必须初始化
2.一个变量可以有多个引用
3.一个引用一旦引用了一个实体,就不能引用其他实体
注意!!!
- #include
-
- int main()
- {
- const int a = 10;
- int& ra = a;//编译不能通过,因为const 修饰的变量a只能读不能写,而ra可读可写,权限放大了
-
- const int b = 20;
- const int& rb = 20;//编译能通过
-
- int c = 30;
- const int& rc = c;//编译能通过,因为c可读可写,rc只可读,权限缩小
-
- //总结,权限可以缩小,但不能放大
-
- return 0;
- }
- #include
-
- int main()
- {
- int i = 0;
- double& bd = i;//编译无法通过
-
- int a = 1;
- const double& pa = a;//编译能通过
-
- return 0;
- }

- #include
- using namespace std;
-
- //C语言交换两个数的写法
- void Swap_C(int* p1, int* p2)
- {
- int tmp = *p1;
- *p1 = *p2;
- *p2 = tmp;
- }
-
- //C++使用引用交换两个数
- void Swap_CPP(int& a, int& b)
- {
- int tmp = a;
- a = b;
- b = tmp;
- }
-
- int main()
- {
- int x = 10;
- int y = 20;
-
- Swap_C(&x, &y);
-
- cout << x << " " << y << endl;
-
- Swap_CPP(x, y);
-
- cout << x << " " << y << endl;
-
- return 0;
- }
两种方法的区别是,一个是开辟两个新的空间来存放x和y的地址,通过地址来找到它们并进行交换
一个是通过引用的方式,即a就是x的别名,b就是y的别名,也就是说a就是x,b就是y。
引用做返回值和普通返回值有什么区别?看下面两段代码的结果。

内联函数指,在使用这个函数的时候,不会再建立函数栈帧,而是该函数会在调用的地方进行展开。
- #include
- using namespace std;
-
- //inline定义内联函数
- inline void Swap(int& a, int& b)
- {
- int tmp = a;
- a = b;
- b = tmp;
- }
-
- int main()
- {
- int x = 10;
- int y = 20;
- Swap(x, y);
- cout << x << " " << y << endl;
- return 0;
- }
内联函数的好处是,再进行函数调用的时候,不会再建立函数栈帧,从而提高代码的效率,
内联函数是一个以空间换时间的做法,而且当代码太长,或是递归时,不会再展开,取决于编译器。