• C++语言对C的增强(2)—— const增强、枚举的增强


    1、const基础知识

     1 #include <iostream>
     2 
     3 int main(void)
     4 {
     5     //const定义常量--->const意味着只读
     6     const int a;
     7     int const b; // 第一个和第二个意思一样,代表一个常整数型
     8     
     9     const int *c;//第三个 c是一个指向常整型数的指针(所指向的内存数据不能被修改,但是本身可以修改)
    10 
    11     int * const d;//第四个 d常指针(指针变量不能被修改,但是它所指向内存空间可以被修改)
    12 
    13     const int * const e;//第五个 e一个指向常整型的常指针(指针和它所指向的内存空间均不能被修改)
    14 
    15     return 0;
    16 }

     红色代表可修改,蓝色代表不可修改

    合理的利用const的好处:
    (1)指针做函数参数,可以有效的提高代码可读性,减少bug;
    (2)清楚的分清参数的输入和输出特性。

    如:

    int setTeacher_err( const Teacher *p)
    const修改形参的时候,在利用形参不能修改指针所指向的内存空间。

    2、C语言中的“冒牌货”

     1 #include <stdio.h>
     2  
     3 int main()
     4 {
     5      const int a = 10;
     6      int *p = (int*)&a;
     7      print("a===>%d
    ", a);//a=10
     8  
     9      *p = 11;
    10      print("a===>%d
    ", a);//a=11
    11      //C中是只读变量,并不是真正的变量
    12      return 0;
    13 }

     

     1 #include <iostream>
     2 using namespace std;
     3 
     4 int main(void)
     5 {
     6     const int a = 10;//a是真正的常量
     7     int *p = (int*)&a;
     8     cout << "a=" << a << endl;//;a = 10
     9     cout << "*p=" << *p << endl;//* p = 10
    10 
    11     *p = 20;//改变的是临时开辟的temp变量
    12     cout << "a=" << a << endl;//a = 10
    13     cout << "*p=" << *p << endl;//* p = 20
    14     return 0;
    15 }

    3、const 和 #define 的相同

    (1)C++中的const修饰的,是一个真正的常量,而不是C中变量(只读),在const修饰的常量编译期间,就已经确定下来了;

    (2)C++中的const常量类似于宏定义:const int c = 5; ≈ #define c 5

    C++中的const常量与宏定义不同:const常量是由编译器处理的,提供类型检查和作用域检查;宏定义预处理器处理,单纯的文本替换。

    C语言中的const变量
        C语言中const变量是只读变量,有自己的存储空间
    C++中的const常量
        可能分配存储空间,也可能不分配存储空间;
        当const常量为全局,并且需要在其它文件中使用,会分配存储空间;
        当使用&操作符,取const常量的地址时,会分配存储空间;
        当const int &a = 10; const修饰引用时,也会分配存储空间。

    4、真正的枚举

    C语言中枚举本质就是整型,枚举变量可以用任意整型赋值。而C++中枚举变量, 只能用被枚举出来的元素初始化

     1 #include <iostream>
     2 using namespace std;
     3 
     4 enum season{spring,summer,autumn,winter};
     5 
     6 int main(void)
     7 {
     8     enum season s = spring;
     9     //s = 0;    //error,但是C语言可以通过
    10     s = summer;
    11     cout << "s=" << s << endl;    //1
    12     return 0;
    13 }
  • 相关阅读:
    db 问题案例
    hystrix 服务监控
    题目004.删除排序数组中的重复项
    线上问题:redis 内存使用率 95%,排查bigkey
    题目003.寻找数组的中心索引
    enum 优雅代码
    java编程工具包 com.alibaba.fastjson
    mysql 问题记录
    题目002 统计N以内的素数
    题目002 反转链表
  • 原文地址:https://www.cnblogs.com/yuehouse/p/9772597.html
Copyright © 2020-2023  润新知