1.const

const可以修饰变量(局部,全局),函数(函数参数,函数返回值,成员函数)。

const修饰的数据是存储在.rodata区就是常量数据区,string也是放在这个区()。

const主要的作用就是让数据不会被更改

1.1变量

1.1.1一般情况

const修饰变量的时候,局部变量和全局变量基本没区别,存储的位置都是.rodata区,都不能被更改,只不过局部变量只有在局部才可以访问。

编译器可能会对const修饰的数据进行优化使得预处理的时候就直接变为常量。

1.1.2修饰指针和引用

修饰引用

叫做常量引用

const int a = 10;
const int& b = a;  // 声明一个常量引用,引用常量 a
b = 20;  // 非法,无法通过常量引用修改常量 a 的值

const修饰的是int&,所以不能修改值的大小,引用又不能像指针一样指向别的地方,所以它什么都不能改

修饰指针

1.指向只读变量的指针

const int *p; // 声明一个指向只读变量的指针,可以指向 int 类型的只读变量
int a = 10;
const int b = 20;
p = &a;  // 合法,指针可以指向普通变量
*p = 30; // 非法
a = 30;  // 合法
p = &b;  // 合法,指针可以指向只读变量
*p = 30; // 非法,无法通过指针修改只读变量的值

const修饰int*,就是指针指向可以随便改,但是它不能改别人的值,即使别人的值是可以改的(比如这里的a)。

2.只读指针

int a = 10;
int b = 20;
int* const p = &a;  // 声明一个只读指针,指向 a
*p = 30;  // 合法,可以通过指针修改 a 的值
p = &b;  // 非法,无法修改只读指针的值

const修饰指针p,就是不可以更改指向,但是它可以改指的东西的值

3.只读指针指向只读变量

const int a = 10;
const int* const p = &a;  // 声明一个只读指针,指向只读变量 a
*p = 20;  // 非法,无法通过指针修改只读变量的值
p = nullptr;  // 非法,无法修改只读指针的值

那就是啥都不能改了

2.static

static可以修饰变量(全局,局部,成员变量),函数(正常函数,成员函数)

在 C++ 中,static的核心含义是:“将实体从动态、共享的外部世界收束到当前编译单元或当前作用域内,使其生命周期与程序静态存储期绑定,从而限制可见性、避免命名冲突、保持状态持久。”

其实static主要可以做两件事:1.限制作用域;2.控制变量生命周期

2.1变量

1. static 修饰全局变量:将变量的作用域限定在当前文件中,使得其他文件无法访问该变量。这是限制了作用域

2. static 修饰局部变量:使得变量在函数调用结束后不会被销毁可以继续使用。这是改变了生命周期

3. static 修饰类成员变量:使得它们在所有类对象中共享,且不需要创建对象就可以直接访问。这也是改变了生命周期

2.2函数

1. static 修饰函数:限定在当前文件中,使得其他文件无法访问该函数。限制作用域

4. static 修饰类成员函数:使得它们在所有类对象中共享,且不需要创建对象就可以直接访问。类中的函数被调用时也不用传入this参数。改变生命周期

3.const与static的差别

const修饰的变量和函数就是不能变、不能改,有恒定的意味

static修饰的变量和函数更多的是改变了它们的作用域和生命周期。static修饰的变量不是恒定的是可以变的。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐