C++编程思想学习日记1-----C与C++的一些区别

  最近在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++中的枚举类型还是有一些区别的,使用的时候需要多加注意。

作者:CodingDream
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/CodingDream/p/4076964.html