一、从C到C++
1、C++命名空间
为了解决合作开发时的命名冲突问题,C++引入了命名空间(Namespace)的概念。
可以使用using来指明要使用的命名空间,例如:
using namespace Li;
fp = fopen("one.txt", "r"); //使用小李定义的变量 fp
Han :: fp = fopen("two.txt", "rb+"); //使用小韩定义的变量 fp
其中 :: 称为域解析操作符,在C++中用来指明要使用的命名空间。
C++将类、函数、宏等都统一纳入一个命名空间,这个命名空间的名字就是std,std是standard的缩写,意思为”标准命名空间“,新版C++库的头文件都是使用的std命名空间。
2、C++布尔类型(bool)
C语言并没有彻底从语法上支持“真”和“假”,只是用 0 和非 0 来代表。C++ 新增了 bool 类型,占用 1 个字节长度。bool 类型只有两个取值,true 和 false:true 的值为1,false 的值为0。
3、C++ new和delete运算符
C语言中,动态分配内存用 malloc() 函数,释放内存用 free() 函数。C++又新增了两个关键字,new 和 delete:new 用来动态分配内存,delete 用来释放内存,例如:
int *p = new int; //分配1个int型的内存空间
delete p; //释放内存
new 操作符会根据后面的数据类型来推断所需空间的大小。
如果希望分配一组连续的数据,可以使用 new[]:
int *p = new int[10]; //分配10个int型的内存空间
delete[] p;
用 new[] 分配的内存需要用 delete[] 释放,它们是一一对应的。
new 也是在堆区分配内存,必须手动释放,否则只能等到程序运行结束由操作系统回收。注意:为了避免内存泄露,通常 new 和 delete、new[] 和 delete[] 操作符应该成对出现,并且不要和 malloc()、free() 混用。在C++中,建议使用 new 和 delete 来管理内存,它们可以自动调用构造函数和析构函数。
4、C++ inline内联函数
为了消除函数调用的时间和空间开销,C++ 提供一种提高效率的方法,即在编译时将函数调用处用函数体替换,类似于C语言中的宏展开。这种在函数调用处直接嵌入函数体的函数称为内联函数(Inline Function),又称内嵌函数或者内置函数。
指定内联函数的方法很简单,只需要在函数定义处增加 inline 关键字。
注意:一般只将那些短小的、频繁调用的函数声明为内联函数。
//声明内联函数
void swap(int *a, int *b); //也可以添加inline,但编译器会忽略
int main(){
int m = 10, n = 20;
swap(m, n);
return 0;
}
//定义内联函数
inline void swap1(int &a, int &b){
int temp = a;
a = b;
b = temp;
}
5、C++ 函数的默认参数
默认参数指当函数调用中省略了实参时自动使用的一个值,这个值就是给形参指定的默认值。
注意:默认参数只能放在形参列表的最后,而且一旦为某个形参指定了默认值,那么它后面的所有形参都必须有默认值。实参和形参的传值是从左到右依次匹配的,默认参数的连续性是保证正确传参的前提。
void func(int a, int b=10, in