跳到主要内容

关键字const有什么含意?修饰类呢?static的作用,用于类呢?还有extern c的作用 ?

参考答案:

const, static, 和 extern "C" 是C++中常见的关键字,每个关键字都有其特定的含义和用法。下面是对它们的详细解释:

1. const

const 关键字用于声明一个变量的值是不可变的,即常量。一旦一个变量被声明为 const,它的值就不能被修改。

const int x = 10;  // x 是一个常量,其值为10

const 用于修饰类的成员函数时,表示这个成员函数不会修改类的任何成员变量(除了被声明为 mutable 的成员变量)。这样的成员函数通常称为常量成员函数。

class MyClass {
public:
    int getValue() const {  // 常量成员函数
        return value;
    }

private:
    int value;
};

2. static

static 关键字在C++中有多种用法,包括:

  • 修饰局部变量:当 static 用于修饰局部变量时,该变量的生命周期会持续到程序执行结束,而不是仅仅存在于其所在的代码块中。此外,该变量只会被初始化一次。
void func() {
    static int count = 0;  // count 会在程序执行期间持续存在,并且只会被初始化一次
    count++;
    std::cout << count << std::endl;
}
  • 修饰类成员:当 static 用于修饰类的成员变量时,该成员变量属于类本身,而不是类的某个实例。这样的成员变量通常称为静态成员变量。静态成员变量在所有实例之间是共享的。
class MyClass {
public:
    static int staticValue;  // 静态成员变量
};
int MyClass::staticValue = 0;  // 静态成员变量的定义(通常在类外部)
  • 修饰类成员函数:当 static 用于修饰类的成员函数时,该成员函数只能访问静态成员变量和其他静态成员函数,不能访问类的非静态成员。
class MyClass {
public:
    static void staticFunc() {  // 静态成员函数
        // ...
    }
};
  • 修饰全局变量和函数:当 static 用于修饰全局变量或函数时,该变量或函数的链接性是内部的,即只能在定义它的文件内部访问。

3. extern "C"

extern "C" 是C++中用于处理C语言链接约定的关键字。在C++中,函数名在编译时会被“mangle”(名字改编),以便支持函数重载。但是,C语言不支持函数重载,所以它没有名字改编。因此,当C++代码需要调用C语言编写的库时,或者当C++代码需要被C语言代码调用时,就需要使用 extern "C" 来告诉编译器使用C语言的链接约定。

extern "C" {
    // 这里的函数和变量使用C语言的链接约定
    void c_function();
}

这样,c_function 就不会被名字改编,从而可以被C语言代码正确地调用。