const,static关键字用法归纳

本文详细介绍了C/C++中const和static关键字的用法,包括const修饰变量、数组、指针、函数及成员函数的特性,以及static在全局变量、局部变量和函数中的作用。还特别讲解了C++中const成员函数的使用限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

众所周知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,明天继续!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值