1、const修饰变量
变成常量,值不可变。
C++默认设定下,const对象仅在该文件内有效。
若要共享,则需要加上extern关键字。
extern const a = 0;
2、const修饰指针(修饰更接近的部分)
int a=10; int * p = &a; int b=10;
p=&a 都为地址, *p=a 为保存在该地址的数据
1)常量指针:const int *p;
- const 后为指针的值,所以指针*p的值不可以改
- p为地址,可以改 (p=&b √)
2)指针常量:int * const p;
- const 后为p(地址),所以p地址不可以改
- *p为该地址的值,可以改 (*p=20 √)
3)const既修饰指针,又修饰常量:const int * const p
- p 和 *p 都不可以修改
总结:const后的部分为常量,不能被修改
3、const修饰函数形参
参数的值在函数内不能修改
void fun(const &int a){}
4、const修饰函数返回值
const修饰函数的返回值,返回值不可直接修改,即
//fun()=8; //不被允许
①修饰返回值为指针,则必须也用const修饰的变量来接收返回值,且不能对该值进行修
②const修饰返回值为普通类型 或 引用:
const int fun(){ return 1;}
const int & fun(){ return 1;}
//都不允许将fun()的值作为左值进行修改,以下会报错
//fun() = 8;
//使用const变量,不能再对a值进行修改
const int a = fun();
//使用非const变量不会报错,也可再对改变其值
int a = fun(); a = 8;
5、const修饰类的成员函数
① 在该成员函数中,成员变量,都不可被修改。
(有个说法是static静态成员变量可以修改,但是如果运行该函数,是不被允许的,
报错:错误 LNK2001 无法解析的外部符号 “private: static int A::a” (?a@A@@0HA) )
class A {
int fun() const {
//p = 1; //编译报错,不可对非static变量进行修改
//a = 1; //编译不报错,但运行出错,即也不可修改
return p;
}
int p = 0;
static int a;
};
② 对函数进行了重载(如果只有一个const函数,没有该非const函数,则不是重载)
const类对象只会调用const修饰的成员函数
class A {
int fun() {
return 0;
}
int fun() const {
return 1;
}
};
int main(){
A a1;
const A a2;
cout<<a1.fun()<<endl;
cout<<a2.fun()<<endl;
}
//输出0,1
6、const修饰类的成员变量
可直接初始化或以下方式:
类的成员变量可以分为静态的和非静态的,
修饰非静态的成员变量,可以在构造函数的参数对该变量进行初始化;
修饰静态的成员变量,则需要在类外对该变量进行初始化。
//只有静态变量才能在类外进行初始化
class A {
//含参构造函数
A(): p(1) {
}
const int p ;
const static int a;
};
const int A::a = 20;