const用法

常量变量声明:

const int a = 10;  // a 是一个常量变量,值不可改变

常量指针:

int x = 10, y = 20;
const int* p1 = &x; // p1 指向的值不可修改,但 p1 本身可以修改
int* const p2 = &x; // p2 指向的地址不可修改,但 p2 指向的值可以修改
const int* const p3 = &x; // p3 既不可以修改指向的地址,也不可以修改指向的值

函数参数声明为常量:

void func(const int x) {
// 函数内部不能修改 x 的值
}

类数据成员声明为常量:

class MyClass {
public:
MyClass(int value) : m_value(value) {}
private:
const int m_value; // 类内部常量成员
};

const 成员函数:

class MyClass {
public:
int get() const { return m_value; } // const 成员函数不能修改类成员变量
private:
int m_value;
};

static用法

静态局部变量:

void incrementCount() {
static int count = 0; // 静态局部变量
count++;
std::cout << "Count: " << count << std::endl;
}

int main() {
incrementCount(); // Output: Count: 1
incrementCount(); // Output: Count: 2
incrementCount(); // Output: Count: 3
return 0;
}

在这个例子中,每次调用incrementCount()函数时,静态局部变量count的值都会保持并递增,而不是在函数退出时重置为0。

静态全局变量:

// file1.cpp
static int value = 10; // 静态全局变量

// file2.cpp
#include <iostream>

extern int value; // 声明外部静态全局变量

int main() {
std::cout << "Value: " << value << std::endl; // Output: Value: 10
return 0;
}

在这个例子中,file1.cpp中定义了一个静态全局变量value,在file2.cpp中通过extern关键字声明并访问该变量。由于value是静态全局变量,因此它的作用域仅限于file1.cpp内部。

静态成员变量:

class MyClass {
public:
static int count; // 静态成员变量

MyClass() {
count++;
}

~MyClass() {
count--;
}
};

int MyClass::count = 0; // 静态成员变量的定义

int main() {
MyClass obj1, obj2, obj3;
std::cout << "Object count: " << MyClass::count << std::endl; // Output: Object count: 3
return 0;
}

在这个例子中,MyClass有一个静态成员变量count,它记录了MyClass对象的数量。无论创建多少个MyClass对象,count的值都会保持一致。

静态成员函数:

class MyClass {
public:
static int getCount() { // 静态成员函数
return count;
}

private:
static int count; // 静态成员变量
};

int MyClass::count = 0; // 静态成员变量的定义

int main() {
MyClass obj1, obj2, obj3;
std::cout << "Object count: " << MyClass::getCount() << std::endl; // Output: Object count: 3
return 0;
}

在这个例子中,MyClass有一个静态成员函数getCount(),它可以直接通过类名访问,而不需要创建对象。该函数返回静态成员变量count的值,表示MyClass对象的数量。