1.
const类型也称为常类型,,定义const常量,具有不可变性。 const int i=100; 可以和宏定义一样,不变则以,一变都变。但是和#define不一样的是从汇编角度来看,const只给出对应内存的地址,而#define给出的是立即数。所以const定义的常量在程序运行过程中只有一份复制品,而宏定义的常量有若干个。
举例:
#define q=6
const int p=6;
int I=q;//编译期间进行宏替换,为I分配内存
int f=q;//再次进行宏替换,为f分配内存
int i=p;//为p分配内存,以后再不分配
int j=p;//不分配内存
2. const char*p, char const*p, char*const p,的区别问题
注意:看*和const谁离右边的定义指针名最近
①*离得近的话表示该指针指向一个常量字符串,不能通过该指针改变字符串的内容(指针指向的值不能改变);
②const离得近的话表示这是一个常量指针,指针指向的位置一开始就确定,不能改变。
其中:const char *p = char const *p;意义为*p内容不可变
char *const p;意义为p这个指针指向固定的地方,不能被改变
const char*p意义为p指向地方存的内容不可变
3.常应用
请看下面三段小程序
#include<iostream>
#include<string>
using namespace std;
void f( string &s)
{
cout<<s<<endl;
}
main()
{
f("rdtygdr dryhdft ");
return 0;
}
第一段编译错误
#include<stdio.h>
#include<iostream>
#include<string>
using namespace std;
void f(const string &s)
{
cout<<s<<endl;
}
main()
{
f("rdtygdr dryhdft ");
return 0;
}
第二段正确 输出:rdtygdr dryhdft
#include<stdio.h>
#include<iostream>
#include<string>
using namespace std;
void f(const string &s)
{
cout<<s<<endl;
}
main()
{
string a="rdtygdr dryhdft ";
f(a);
return 0;
}
第三段正确 输出:rdtygdr dryhdft
第一段错误的原因在于”rdtygdr dryhdft “会产生一个临时对象,而在C++中,临时对象是const类型的,因此无法从非const转为const .