5.static关键字的作用

static关键字的作用
static 是C++中的一个关键字,用于指定变量、函数或类成员的存储类型或作用域。

下面是 static 关键字的几种用法:
静态局部变量
在函数内部声明的局部变量可以使用 static 关键字进行声明,这将使变量在程序生命周期内只被初始化一次,即使函数被多次调用
静态全局变量
使用 static 关键字在函数外部声明全局变量,将使变量只能在当前文件中访问
静态成员变量
在类中声明的静态成员变量将被所有类对象共享,并且可以在不创建类对象的情况下使用
静态成员函数
在类中声明的静态成员函数可以在不创建类对象的情况下使用,并且不能访问非静态成员变量

静态局部变量

在函数内部声明的局部变量可以使用 static 关键字进行声明,这将使变量在程序生命周期内只被初始化一次,即使函数被多次调用。例如:

复制
void myFunction() {
static int count = 0;
count++;
std::cout << "Count: " << count << std::endl;
}

int main() {
myFunction(); // 输出 Count: 1
myFunction(); // 输出 Count: 2
myFunction(); // 输出 Count: 3
return 0;
}
静态全局变量
使用 static 关键字在函数外部声明全局变量,将使变量只能在当前文件中访问。例如:

复制
// 文件1.cpp
static int count = 0;

void myFunction() {
count++;
std::cout << "Count: " << count << std::endl;
}

// 文件2.cpp
void anotherFunction() {
// 编译错误,无法访问 count 变量
std::cout << "Count: " << count << std::endl;
}

int main() {
myFunction(); // 输出 Count: 1
myFunction(); // 输出 Count: 2
myFunction(); // 输出 Count: 3
return 0;
}
静态成员变量
在类中声明的静态成员变量将被所有类对象共享,并且可以在不创建类对象的情况下使用。例如:

复制
class MyClass {
public:
static int count;
};

int MyClass::count = 0;

int main() {
std::cout << "Count: " << MyClass::count << std::endl; // 输出 Count: 0
MyClass::count++;
std::cout << "Count: " << MyClass::count << std::endl; // 输出 Count: 1
return 0;
}
静态成员函数
在类中声明的静态成员函数可以在不创建类对象的情况下使用,并且不能访问非静态成员变量。例如:

复制
class MyClass {
public:
static void myFunction() {
std::cout << “Hello, World!” << std::endl;
}
};

int main() {
MyClass::myFunction(); // 输出 Hello, World!
return 0;
}
这些是 static 关键字的几种用法,它们都有不同的作用和用途。

编程题

Node* mergeLinkedList(Node* head1, Node* head2) {
    if (head1 == nullptr) { return head2; }
    if (head2 == nullptr) {return head1; }
    Node* mergedHead = nullptr;
    Node* tail = nullptr;
    if (head1->data < head2->data) {
        mergedHead = tail = head1;
        head1 = head1->next;
    } else {
        mergedHead = tail = head2;
        head2 = head2->next;
    }
    while (head1 != nullptr && head2 != nullptr) {
        if (head1->data < head2->data) {
            tail->next = head1;
            tail = head1;
            head1 = head1->next;
        } else {
            tail->next = head2;
            tail = head2;
            head2 = head2->next;
        }
    }
    if (head1 != nullptr) {
        tail->next = head1;
    } else {
        tail->next = head2;
    }
    return mergedHead;
    }

06-03 01:40