zoukankan      html  css  js  c++  java
  • 1、C++的的升级


    1、C语言的缺点

        (1)重用性差

        (2)维护性差

    2、C++

        从面向世界的需求出发来设计我们的程序,

    3. 使用增强

    A.

    for (int i = 0; i < 10; i++)
    {
    }

        C语言编译器的话,会报错,因为C语言认为,变量需要先定义,后面再时候,而C++的编译器则是可以边定义边使用。

    B、

    C语言编译器 : 可以重复定义变量,但是C++则不允许。

     

    C、对const 的增强:

        C语言:

        const 修饰之后,只是说明这边个边不能作为左值使用而已,也就是把变量修饰为只读变量

     

    C++:

        const 修饰之后,变量就真的是常量了 

        当const 变量的时候,就将常量放到符号表里面;

    编译的过程若发现使用了常量,则直接使用符号表里面的值进行替换

     

    D、const  和 define  区别

    const 常量 是由编译器进行处理,提供类型检查和作用域的检查

    宏定义是由预处理器处理,做单纯的文本替换而已。

     

    E.对bool 类型的增强

    int main()
    {
        int a;
        bool b = true;
        printf("b = %d, sizeof(b) = %d
    ", b, sizeof(b));
        b = 3;
        a = b;
        printf("a = %d, b = %d
    ", a, b);
        b = -5;
        a = b;
        printf("a = %d, b = %d
    ", a, b);
        b = 0;
        a = b;
        printf("a = %d, b = %d
    ", a, b);
        while (1);
    }

     

    b = 1, sizeof(b) = 1
    a = 1, b = 1  // b 虽然是等于三,但是非零就是 true,编译器是以 一进行替换,
    a = 1, b = 1 // 非零所以为 true,
    a = 0, b = 0

    因为C++编译器会将非零的值全部转为 true,而零值则转为 false,对于 true 和false 而言,内部都是用 零和 一进行替换,

     
    int main()
    {
        bool b = false;
        printf("b = %d
    ",b);
        b++;
        printf("b = %d
    ",b);
        while (1);
    }
        输出结果为:01

    F. 三木运算符

    int a = 1;
    int b = 2;
    (a < b ? a : b) = 3;
    printf("a= %d, b = %d
    ", a, b);

    C编译器的话,就会报错,因为在c编译器中,三木运算符返回的是数值,数值是不可以做左值的。

    但是在C++编译器就可以,因为三木运算符返回的是变量,所以输出的a = 3, b = 2;

    4.引用

        引用其实就是对已经变量的一个别名,比如:

    int a;
    int &b = a;

       这就是一个引用的列子,也就是说,对 b 的操作,其实等同于对 a 的操作,记住引用的如好,不是取地址符,是引用哈,

    int a ;
        int &b = a;  // 定义了引用,必须使用其他的变量马上进行初始化
        b = 5;
        printf("a = %d,b = %d
    ",a, b);
        printf("%08x
    ", &a);
        printf("%08x
    ", &b);

    输出的结果是,a =b =5,输出的地址也是一样的地址

    引用其实是有自己的存储空间的,内部的实现的方式其实也是通过指针的方式实现的,所以一个引用占据的大小就是四个字节,

    当函数的返回值作为引用的时候:

        (1)栈变量做引用的话,这个实时不被允许,最好不要,

        (2)全局变了或者静态变量,可以作为引用,

  • 相关阅读:
    C#转义字符,以及@的作用
    建立数据库链接 create database link以及synonym
    Oracle11g密码区分大小写导致database link无法连接
    ES5:深入解析如何js定义类或对象。
    jQuery.extend()、jQuery.fn.extend()扩展方法示例详解
    浅析JavaScript访问对象属性和方法及区别
    Angular ui-router的常用配置参数详解
    Angular 通过constant(name,value),value(name,value)创建服务
    Angular ocLazyLoad 与ui-router的配合使用
    AngularJs指令配置参数scope详解
  • 原文地址:https://www.cnblogs.com/qxj511/p/5211934.html
Copyright © 2011-2022 走看看