📜  C++修饰符类型(1)

📅  最后修改于: 2023-12-03 15:14:04.068000             🧑  作者: Mango

C++修饰符类型

在C++语言中,修饰符类型指的是用来修饰变量或函数的关键字。修饰符类型可以用来改变变量或函数的类型、作用范围、生命周期等特性。C++中常用的修饰符类型包括:

  • const
  • static
  • volatile
  • extern
  • mutable

下面将逐一介绍这些修饰符类型的用法以及对变量或函数的影响。

const

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修饰的函数表示该函数为静态函数,只能在该文件内被调用。下面是使用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修饰符的例子:

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变量或函数时,编译器不会在当前文件中分配存储空间(因为其定义在其他文件中),而只是声明其存在。下面是使用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修饰的变量表示为可变数据成员,即使其所属的类在常成员函数中,也可以被修改。下面是使用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++程序员来说非常重要。