const字面量优化
const//只读,必须初始化,一旦初始化不能更改,但是可以通过其他指针变量或者引用变量(C++中)来指向相同空间从而修改值。
const字面量优化:
1 #define PI 3.1415
2 const double pi = 3.1415;
3 //c++关于const引入了一个优化,叫const字面量优化
4 //字面量优化:当const变量初始化为一个字面值时,c++把变量当成宏一样
5 const int ciz = 6;//带有宏的效果
6 cout << ciz << endl;//6
7 int* cizp = (int*)&ciz;
8 cout << ciz <<"和"<<*cizp<< endl;//6和6
*cizp = 33;
cout << ciz << "和" << *cizp << endl;//6和33
//使用宏的速度要快于使用变量
const在C中和C++中的测试用例:
test.c中的相关代码:
1 #include<stdio.h>
2 int main() {
3 const int a = 25;
4 printf("%d\n",a);
5 int* p = &a;
6 (*p) = 30;//"解引用",什么类型的指针,解引用后就是什么类型
7 printf("%d\n",a);
8 const int* p1 = &a;
9 //*p1 = 77;//不能修改,p解引用后是const int类型
10 const int* ci1 = 10;//ci1是一个指针变量,指向一个const int类型的变量
11 ci1 = &a;//ci1本身不是一个只读变量,可以指向其他变量
12 printf("%d\n",*ci1);
13 int const* ci2 = 10;//ci2和ci1含义类似
14 int* const ci3 = &a;//ci3是一个只读的指针变量,指向一个int类型的变量
15 printf("%d\n",*ci3);
16 *ci3 = 24;//ci3解引用后指向一个int类型变量
17 printf("%d\n",*ci3);
18 const int* const ci4 = &a;//ci4是一个只读的指针变量,指向一个const int 类型变量
19 return 0;
20 }
test.cpp中的相关代码:
1 #include<iostream>
2 using namespace std;
3 int main() {
4 int a = 25;
5 const int c = a;
6 const int& b = a;//相当于给a取别名
7 cout << c << endl;
8 cout << b << endl;
9 cout << endl;
10 a = 33;
11 cout << c << endl;
12 cout << b << endl;
13 cout << endl;
14 int& d = (int&)b;//c++觉得用非只读的引用或指针来引用只读的变量不安全,必须手动强制转换
15 d = 23;
16 cout <<b<< endl;
17 return 0;
18 }
用const修饰的变量初始化可以在构造函数中初始化。
例如,
1 class A{
2 public:
3 const int a;
4 A():a(5){
5
6 }
7 }
枚举
优点:可以用文字来表示
1 enum 天气{
2 晴天,阴天,雨天,多云
3 }
4 天气 d = 天气::晴天;//d就只能是其中之一
5 d = 阴天;
6 d = 1;//d = 阴天;和d = 1;的这两种表现形式(等效)