众所周知const,和static关键字在c语言与cpp中都扮演重要角色,能熟练掌握它们,将对c语言和cpp 的学习起到很大的帮助作用。 今天我就来把自己掌握的这方面知识,和大家分享一下,可能自己归纳的不全,也有许多不足之处,希望大家能多多批评和指正。 首先,先来看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成员函数吗?
可以调用1.static修饰全局变量 改变外部连接属性,有外部链接变成内部链接属性
2.static修饰局部变量 作用域不变,生命周期改变,由栈上存错,变成静态全局区存储, 因此,初始化一次,可以赋值多次。
3.static修饰函数 改变链接属性,有外部链接属性变成内部链接属性
4在c++类的静态成员变量和函数中:
1.静态数据成员(1).静态成员变量,为各对象所共有的,所有对象都可以引用它,在内存中只占一份,改变它的值,则各个对象中的它的值都同时改变。
(2).静态数据成员可以初始化,但只能在类体外进行初始化,不能用参数初始化表对静态数据成员初始化。
(3)可以通过对象名引用,也可以通过类名引用。
2.静态成员函数静态成员函数没有隐含的this 指针,主要用来访问静态数据成员,而不访问非静态成员。
喜欢就收藏吧<笑脸> come on baby,明天继续!!!
新闻热点
疑难解答