一 "const" 修饰变量
只能被初始化和读取,不能被赋值更改,且必需初始化,不初始化的话会因为读取到随机数而报错。
example:
const int date=100;
cout<<"date = "<<date;
//结果为100;
注意:如果以常量初始化,使用const之后,并不是立马开辟空间给date,而是事先存放在“符号常量表”中,当对date取地址时,系统才会为date开辟空间。
个人感觉有点类似于map.find。
后补:感觉引用map.find不合适哦,似乎应该是ASCII码值的感觉更贴切。
但是可以导出数据来进行二次更改
example:
const int date=100;
int *p=(int *)&date;//经过实践,这里的原因是要把const int *强制转换为int *,所以才有了(int *)。
*p=2000;
cout<<"*p"<<*p;//结果为2000。
cout<<"date"<<date;//结果为100。
这里就是把date的值装到*p里面去,所以对*p操作不影响,也不会报错
但是去找date,依旧是输出了100。
如果以变量初始化,那么const会立即开辟存储空间(没有符号常量表)
example:
int a=10;
const int date=a;
cout<<date;//结果是10。
最后,const修饰只读变量时,如果是自定义类型变量来进行初始化,也会立刻开辟空间(比如结构体等)
二 "register" 尽量将变量放入CPU的寄存器里
register的功能是尽量将变量放入CPU的寄存器当中,目的是提高读取速度。
寄存器可容纳的数量有限,所以并不是100%成功。
example:
register int a=100;//顺利的话,变量a已经被放入CPU里面的寄存器里了
cout<<a;//输出100;
注意:尽量不要对使用了register的变量进行取地址的操作(例如&a),因为取地址针对的是内存里的地址。因此其实反过来说,任何可以通过register操作还能进行&操作且不报错的,说明没有把变量成功的放入寄存器中,且编译器会检查该变量是否被频繁使用来进行判断。
标签:初始化,const,变量,int,关键词,c++,学习,date,cout From: https://www.cnblogs.com/wangbohan/p/17081205.html