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 }