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\n", a);//a=10
 8  
 9      *p = 11;
10      print("a===>%d\n", 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 }
posted @ 2018-10-11 17:03  悦悦的小屋  阅读(445)  评论(0编辑  收藏  举报