众所周知const,和static关键字在c语言与cpp中都扮演重要角色,能熟练掌握它们,将对c语言和cpp 的学习起到很大的帮助作用。
今天我就来把自己掌握的这方面知识,和大家分享一下,可能自己归纳的不全,也有许多不足之处,希望大家能多多批评和指正。
首先,先来看const这个关键字。
const用法归纳
<在c语言中>
1. const修饰变量,具有常属性,即只读属性,但仍是一个变量;
例如:
const int MAX = 100;
int Arr[MAX];
这段代码在c语言中,不能顺利运行,说明MAX仍是一个变量,只不过只有只读属性,因为它是只读变量,所以必须在定义时初始化,不能赋值;
2.const修饰数组,说明数组是一个只读数组,const放前放后都可以。
例如:
int const a[5] = {1,2,3,4,5};
const int a[5] = {1,2,34,5,};
3.const修饰指针
由const所在位置不同,意义不同
const int *p; //p可变,p指向的对象不可变
int const *p; //p可变,p指向的对象不可变
int * const p; //P不可变,p指向的对象可变
const int * const; // 指针p和p指向的对象都不可变
4.const修饰函数的参数和返回值,告诉别人修饰的参数和返回值都是不能被改变的
例如
void Fun(const int i); //告诉编译器i在函数体内不能被改变
const int Fun(void); //返回值不可被改变
const在cpp中还加了另外一些使用
1.const修饰成员函数
在成员函数后面加const,const修饰this指针所指向的对象,也就是保证const成员函数的对象在函数内不会改变。
class Data
{
public:
void Display() const
{
cout<<year<<"-"<<month<<"-"<<day<<endl;
}
private:
int year;
int month;
int day;
};
int main()
{
Data d1;
d1.display();//相当于 d1.display(const Data *this);
return 0;
}
可以看出 this 所指的对象不能改变,*this 不变
还要注意在一下几种情况的使用
1.const对象可以调用非const成员函数和const成员函数吗?
不能调用非const成员函数,因为权限变大了。指针类型不同
可以调用const成员函数。
2.非const对象可以调用非const成员函数和const成员函数吗?
两个都可以调用
3.const成员函数内可以调用其他的const成员函数和非const成员函数吗?
第一个可以调用,因为都不可变,所以更加的安全
第二个不可以,没加const的函数可以修改,调用函数不可改,冲突了
4.非const成员函数内可以调用其他的const成员函数吗?
可以调用
static 关键字用法归纳
1.static修饰全局变量
改变外部连接属性,有外部链接变成内部链接属性
2.static修饰局部变量
作用域不变,生命周期改变,由栈上存错,变成静态全局区存储,
因此,初始化一次,可以赋值多次。
3.static修饰函数
改变链接属性,有外部链接属性变成内部链接属性
4在c++类的静态成员变量和函数中:
1.静态数据成员
(1).静态成员变量,为各对象所共有的,所有对象都可以引用它,在内存中只占一份,改变它的值,则各个对象中的它的值都同时改变。
(2).静态数据成员可以初始化,但只能在类体外进行初始化,不能用参数初始化表对静态数据成员初始化。
(3)可以通过对象名引用,也可以通过类名引用。
2.静态成员函数
静态成员函数没有隐含的this 指针,主要用来访问静态数据成员,而不访问非静态成员。
喜欢就收藏吧<笑脸>
come on baby,明天继续!!!