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

2021年11月23日 阅读数:3
这篇文章主要向大家介绍C++语言对C的加强(2)—— const加强、枚举的加强,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

一、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 }

 红色表明可修改,蓝色表明不可修改ios

合理的利用const的好处:
(1)指针作函数参数,能够有效的提升代码可读性,减小bug;
(2)清楚的分清参数的输入和输出特性。spring

如:函数

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

二、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 }

 

 

 

三、const 和 #define 的相同

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

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

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

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

四、真正的枚举

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 }