• 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
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    EasyUI前后端分离
    easyUI权限
    EasyUI入门
    MVC(增删改查)
    MYSQL01 CentOS7下搭建mysql5.6
    Linux02:CentOS7配置静态IP
    Linux01:CentOS7桥接模式主机和虚拟机ping不通问题解决
    windows环境01 xampp+phpwind环境搭建
    Python模块之目录
    Django
  • 原文地址:https://www.cnblogs.com/CodingDream/p/4076964.html
Copyright © 2020-2023  润新知