最近在C++编程思想这一本书,所以打算把自己每天看到的一些东西记录一下。
总所周知,C++是从C语言发展而来,他们之间有很多的相同的地方,同样也有很多不同的地方。如果要问C和C++有什么不同,肯定很多人都会说C是面向过程的语言,C++是面向对象的。还有C++中有class,有模板等等。但是C++和C中有很多地方,用法基本上相同,但是同样也有区别的东西又那些呢?
1.不带参数的函数
如果下面我问这样一个问题: int func();这样一个函数在C和C++中有什么不同,这个函数有表示什么?对于这个函数的意思,大家都会说是一个没有参数,返回值为int型的函数。当然在C++中的话,这样说没有问题。但是在C语言中会有一点点不同。C语言中对于像这种形式的函数的意义是,返回值为int,参数不确定的一个函数。有点类似于...的可变参数。如果声明为int func(void)的话,就没有什么歧义了,在C和C++中都代表返回值为int,没有参数的函数。
2.强制转换
对于强制转换,大家都很熟悉,例如:
int a = 10;
double b = (double)a;
上面的是C语言中的强制类型转换。
在C++中为了兼容C语言,在保留了上面这种转换方式的同时,新增加了一种类似函数调用的转换方式,例如:
int a = 10;
double b = double(a);
这两种转换方式的区别在于,一种是给类型加上括号,另一种是给变量加上括号。
当然在C++中还推出了一种显示的转换语法:static_cast, const_cast, reinterpret_cast, dynamic_cast。
3.struct的声明
struct,结构体的定义大家都会,例如:
struct ST_XXX
{
int a;
float b;
};
但是,在C语言中定义了一个结构体之后,想要定义一个结构体的对象,相对而言比较麻烦,必须要在结构体名称前面加上struct,如下所示:
struct ST_XXX st;
还有另外的一种定义方式,就是使用typedef,如下所示:
typedef struct
{
int a;
float b;
}ST_XXX;
这样的话,在定义一个对象的时候,就可以去掉前面的struct,例如:
ST_XXX st;
当然第二种方式而已显得还是比较麻烦,因为必须要使用到typedef。当然这只是在C语言中,而在C++中则不存在这个问题。C++中就好像是上面两张种方式的结合体,例如:
struct ST_XXX
{
int a;
float b;
};
ST_XXX st;
4.真假的判定
C语言中不存在bool类型的变量,所以真假的判定是通过是否为0来判定的。
5.枚举类型enum
对于一个已经声明的枚举类型而言,例如:
enum Color
{
red,
green,
blue
};
Color a;
对于变量c执行a++的语句,在C语言中是可以的。因为C语言中的枚举很简单,只是将一个整数值和一个名称联系起来。而C++中对于枚举,是将枚举看着一个新类型,对枚举的类型检查比在C中更加的严格。因为当执行a++这个语句的时候,会执行两次类型转换。首先会把a从一个枚举的color型转换为一个int型(C++中是合法的),然后将转换成为int后的a执行++操作。然后将递增后的a转换成为color类型(在C++中是不合法的)。
可知,C和C++中的枚举类型还是有一些区别的,使用的时候需要多加注意。