zoukankan      html  css  js  c++  java
  • C与C++的一些不同之处

    以前也没多注意C和C++有什么差别,感觉C++没有类,模板和引用,那么C++就是C
    近几天特别注意了这方面的问题,发现以前想的还是有问题的。
    去掉了类,模板和引用的C++和C还是有一定的差别的。
    下面列了几点还多多指教

    函数原型
    在C++中函数原型是必须的,而C中是可选的
    在C中圆括号意味着前向原型声明,但在C++中就意味着函数没有原型
    例如
    int test();
    int main()
    {
        int test(4,5);
    }
    int test(int a,int b)
    {
    }
    在C的旧风格中可以接受的,但是在C++中就会产生一个错误
    C++允许声明函数名相同的多个函数,只要他们具有不同的参数表

    char常量
    char常量在C中被认为int类型的,C++中则被看成是char类型的
    例如
    char ch=‘A’;
    在C中,常量‘A’的字符编码存储为一个int值,相同的数值也被存储在变量ch中,但是在ch中只占据内存中的一个字节,
    在C++中,‘A’和ch都是使用一个字节

    const修饰符
    C中全局的const具有外部链接,C++中他具有内部链接
    C++中的const double PI=3.14159;
    相当于C中的static const double PI=3.14159;
    前提两者都在所有函数的外部
    C++的意图是使得在头文件中使用const更加的简单
    C++中可以使用extern使一个const值具有外部链接
    两种语言都可以创建具有内部和外部链接的常量,不同的只是在于默认使用哪种链接
    C++中可以使用const value初始化const,但是在C中就不可以
    例如
    const int a=1;
    const int b=2;
    const int c =a*b; /*C++合法,C非法*/

    结构和联合
    声明一个带标记的结构和联合之后,在C++中就可以使用该标记作为类型名了
    struct point
    {
        int x;
        int y;
    };
    struct point m;         /*C合法,C++合法*/
    point n;                /*C不合法,C++合法*/

    在C++中结构名可能与变量名相冲突。
    #include <stdio.h>

    float point = 10.001;

    int main()
    {
        struct point {int x;int y;};
        struct point m = { 2, 4};

        printf("%f/n",point);       /*C可以,C++不可以*/
        return 0;
    }
    C++把printf()中的point解释为结构类型而不是外部变量。
    struct box
    {
        struct point {int x;int y;} upperleft;
        struct point lowerright;
    };
    c中可以使用任一结构,c++中使用嵌套结构要求一个特殊的符号::。
    strcut box ad;      /*C合法,C++合法*/
    strcut point dot;   /*C合法,C++非法*/
    box::point dot;     /*C++*/

    枚举
    对于枚举,c++比c更严格
    使用枚举enum变量可以做的唯一有用的是为他赋予一个enum变量后和其他的之进行比较;不经过显式的类型转换就不可以把int值赋给enum变量,而且也不能递增一
    个enum变量。
    enum sample {sage,thyme,salt,pepper};
    enum sample season;
    season =sage;           /*c,c++*/
    season =2;              /*c warnning,c++ error*/
    season =(enum sample) 3;    /*C,C++*/
    season++;                   /*C可以,C++ error*/
    C++允许声明是不用关键字enum
    sample season;  /*C非法,C++合法*/
    如果一个变量和enum类型有相同名字就会有冲突。

    指向void的指针
    C,C++可以把任意类型的指针赋值给指向void的指针,
    C++中除非使用了显式的类型转换,否则不能将指向void的指针赋值给其他类型的指针。
    int arg[5]={1,2,3,4,5};
    int *pi;
    void *pv;
    pv = arg;       /*C,C++*/
    pi = pv;        /*C合法,C++非法*/
    pi = (int*)pv;  /*C,C++*/
    C++中可以把派生类对象的地址赋值给其他类型的指针,C中不存在。

    bool类型
    C++中布尔类型是bool,true,false是关键字;
    C中包含了stdbool.h在可以使用true和false。
     
  • 相关阅读:
    【网络】【操作系统】select、poll、epoll
    【JMM】java内存模型及volatile关键字底层
    【数据库】连接查询(from 内连接 外连接)
    【数据库】SQL牛客练习关键点复习
    【SpringMVC】文件/图片 的下载与上传
    【SpringMVC】拦截器实现与网页跳转步骤
    什么是hashMap,初始长度,高并发死锁,java8 hashMap做的性能提升
    自己写一个HashMap
    String去除重复字符两个方法
    Solr与Elasticsearch比较
  • 原文地址:https://www.cnblogs.com/zelos/p/3402919.html
Copyright © 2011-2022 走看看