📅  最后修改于: 2023-12-03 15:14:04.068000             🧑  作者: Mango
在C++语言中,修饰符类型指的是用来修饰变量或函数的关键字。修饰符类型可以用来改变变量或函数的类型、作用范围、生命周期等特性。C++中常用的修饰符类型包括:
下面将逐一介绍这些修饰符类型的用法以及对变量或函数的影响。
const修饰的变量表示为一个常量,其值不能被修改。const修饰的函数表示该函数不会修改类中的任何成员变量(称为常成员函数)。下面是使用const修饰符的例子:
const int a = 10; // a为常量,值不能被修改
class MyClass {
int x;
public:
int get_x() const { // get_x为常成员函数,不能修改x的值
return x;
}
}
static修饰的变量表示为静态变量,其生命周期是整个程序运行期间(即使变量所在的函数结束,该变量的值也不会被释放)。static修饰的函数表示该函数为静态函数,只能在该文件内被调用。下面是使用static修饰符的例子:
void foo() {
static int x = 0; // x为静态变量
x++;
cout << "x = " << x << endl;
}
class MyClass {
static int a; // a为静态变量
public:
static void set_a(int val) {
a = val;
}
static int get_a() {
return a;
}
};
int MyClass::a = 0; // 静态变量a需要在类外进行初始化
int main() {
foo(); // x = 1
foo(); // x = 2
MyClass::set_a(10);
cout << "a = " << MyClass::get_a() << endl; // a = 10
return 0;
}
volatile修饰的变量表示为易变变量,其值随时可能被修改,需要每次访问时都从内存中读取(而不是从寄存器中读取)。下面是使用volatile修饰符的例子:
volatile int a = 0; // a为易变变量
void interrupt_handler() {
a = 1; // 在中断中修改a的值
}
int main() {
while (a == 0) {
// 等待a的值被改变
}
cout << "a = " << a << endl; // a = 1
return 0;
}
extern修饰的变量或函数表示为外部变量或外部函数,其定义在其他文件中。在当前文件中声明一个extern变量或函数时,编译器不会在当前文件中分配存储空间(因为其定义在其他文件中),而只是声明其存在。下面是使用extern修饰符的例子:
// 文件One.h
extern int a; // 声明变量a存在于其他文件中
// 文件One.cpp
int a = 0; // 定义变量a
// 文件Two.cpp
#include "One.h"
void foo() {
a++;
cout << "a = " << a << endl;
}
int main() {
foo(); // a = 1
foo(); // a = 2
return 0;
}
mutable修饰的变量表示为可变数据成员,即使其所属的类在常成员函数中,也可以被修改。下面是使用mutable修饰符的例子:
class MyClass {
mutable int x;
public:
MyClass(int val) : x(val) {}
int get_x() const {
// 常成员函数
// x为可变数据成员,在该函数中仍然允许修改它的值
x++;
return x;
}
};
int main() {
MyClass obj(10);
cout << "x = " << obj.get_x() << endl; // x = 11
cout << "x = " << obj.get_x() << endl; // x = 12
return 0;
}
以上就是C++中常用的修饰符类型,它们可以用来改变变量或函数的类型、作用范围、生命周期等特性,对于C++程序员来说非常重要。