zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    判断是否是三角形,三角形面积,三角形内外切圆半径和面积
    输入从a加到b的两个数字
    九九乘法表
    某公司销售员工的年终奖根据该员工的年销售总额s提成,年销售总额超过1万元才提成,超过部分提成比例如下:
    判断是否是闰年?
    从键盘上输入三个点的坐标值(1,1)、(2,4)、(3,2),编程求该三角形的面积。
    输入一个正方形的边长,输出正方形的外接圆和内接圆的面积。
    .输入一个4位正整数,以相反的次序输出,例如,输入1234,输出为4321。
    SecoClient在win10系统中连接失败解决方案
    PHP 关于判断输入日期是否合法
  • 原文地址:https://www.cnblogs.com/yuehouse/p/9772597.html
Copyright © 2011-2022 走看看