cpp中static的作用
时间: 2023-05-20 17:05:53 浏览: 58
在 C++ 中,static 关键字可以用于以下三个方面:
1. 修饰变量:在函数内部使用 static 修饰的变量称为静态局部变量,它的作用域仅限于该函数内部,但是它的生命周期会一直持续到程序结束。静态局部变量只会被初始化一次,即第一次进入该函数时。
2. 修饰函数:在函数声明前加上 static 关键字,可以将该函数的作用域限制在当前文件内部,其他文件无法访问该函数。
3. 修饰类成员变量和函数:在类中使用 static 修饰的成员变量和函数称为静态成员变量和静态成员函数。静态成员变量和函数属于整个类,而不是某个对象,它们可以被所有对象共享。静态成员变量需要在类外部进行初始化,而静态成员函数只能访问静态成员变量和函数,不能访问非静态成员变量和函数。
相关问题
cpp static变量
在C++中,`static`关键字可以用来定义静态变量。静态变量可以具有以下特点:
1. 静态变量在程序开始时被初始化,只会被初始化一次,直到程序结束时才会被销毁;
2. 静态变量在声明时就已经分配了内存,存储在静态数据区,不会随着函数的调用而分配和销毁;
3. 静态变量的作用域与普通变量一样,可以是全局的也可以是局部的,但是对于局部变量而言,静态变量只会在函数第一次被调用时初始化一次,之后每次调用函数时都会使用同一块内存。
以下是一个静态变量的示例代码:
```cpp
#include <iostream>
void foo() {
static int count = 0; // 静态变量count
count++;
std::cout << "foo has been called " << count << " times." << std::endl;
}
int main() {
for (int i = 0; i < 5; i++) {
foo();
}
return 0;
}
```
这个程序会输出:
```
foo has been called 1 times.
foo has been called 2 times.
foo has been called 3 times.
foo has been called 4 times.
foo has been called 5 times.
```
在这个例子中,我们定义了一个静态变量`count`,用于记录函数`foo`被调用的次数。每次调用函数`foo`时,静态变量`count`会自增,并输出当前的调用次数。由于`count`是静态变量,所以它只会被初始化一次,而不是每次调用函数时都会重新初始化。
cpp11的static_assert
在C++11中,static_assert是一个编译时断言,用于在编译时检查某些条件是否成立。如果条件不成立,则编译器会报错,并显示指定的错误消息。
static_assert的语法如下:
```cpp
static_assert(condition, message);
```
其中,condition是一个编译时可求值的常量表达式,如果它的值为false,则会触发一个编译期错误。message是一个字符串字面量,用于指定错误消息。
例如,下面的代码使用了static_assert检查一个类型的大小是否等于4:
```cpp
#include <type_traits>
static_assert(sizeof(int) == 4, "int must be 4 bytes");
```
如果int的大小不是4个字节,编译器会报错,并输出指定的错误消息。这可以帮助开发者在编译时发现一些潜在的问题。