首页 > 编程语言 >C++ static关键字

C++ static关键字

时间:2024-07-14 20:29:17浏览次数:14  
标签:函数 静态 成员 C++ 关键字 static Example 变量

在C++中,static关键字有多种用途,主要用于控制变量和函数的存储期和链接性。下面详细介绍static关键字在不同上下文中的用法,并提供相应的代码示例。

1. 静态局部变量

静态局部变量在函数中定义,但它们的生命周期贯穿程序的整个运行周期,而不仅仅是函数的执行周期。静态局部变量在第一次调用函数时初始化,并且保持其值直到程序结束。

#include <iostream>

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

int main() {
    staticLocalExample();
    staticLocalExample();
    staticLocalExample();
    return 0;
}

输出:

Count: 1
Count: 2
Count: 3

2. 静态类成员变量和成员函数

静态成员变量和成员函数属于类而不是类的对象。静态成员变量在所有对象之间共享,而静态成员函数只能访问静态成员变量。

#include <iostream>

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

    static void staticFunc() { // 静态成员函数
        std::cout << "Static Variable: " << staticVar << std::endl;
    }
};

// 静态成员变量的定义和初始化
int MyClass::staticVar = 0;

int main() {
    MyClass::staticVar = 10; // 通过类名访问静态成员变量
    MyClass::staticFunc();   // 通过类名调用静态成员函数

    MyClass obj1, obj2;
    obj1.staticVar = 20; // 通过对象访问静态成员变量
    MyClass::staticFunc();

    return 0;
}

输出:

Static Variable: 10
Static Variable: 20

3.静态全局变量和函数

静态全局变量和函数的作用域限制在定义它们的文件中。这种用法通常用于实现文件内的封装,避免命名冲突。

#include <iostream>

// 静态全局变量
static int globalVar = 100;

// 静态函数
static void staticFunction() {
    std::cout << "Static Function: " << globalVar << std::endl;
}

int main() {
    staticFunction();
    return 0;
}

输出:

Static Function: 100

4.静态成员变量在类中的初始化

静态成员变量必须在类定义外进行初始化。

#include <iostream>

class Example {
public:
    static int staticVar;

    Example() {
        staticVar++;
    }

    static void showStaticVar() {
        std::cout << "Static Variable: " << staticVar << std::endl;
    }
};

// 静态成员变量的定义和初始化
int Example::staticVar = 0;

int main() {
    Example obj1;
    Example obj2;
    Example::showStaticVar();  // 输出:Static Variable: 2

    return 0;
}

总结

  • 静态局部变量:在函数中定义,但其生命周期贯穿程序的整个运行周期。
  • 静态类成员变量和成员函数:属于类而不是类的对象,所有对象共享静态成员变量。
  • 静态全局变量和函数:作用域限制在定义它们的文件中。
  • 静态成员变量初始化:必须在类定义外进行初始化。

标签:函数,静态,成员,C++,关键字,static,Example,变量
From: https://blog.csdn.net/Simona_Wu/article/details/140376024

相关文章

  • C++字符串String和字符串字面量String Literals
    在C++中,字符串(String)是一种用于表示和处理文本数据的基本类型。C++提供了两种主要的字符串类型:C风格字符串(C-StyleString):使用字符数组表示。标准库字符串(std::string):使用标准库中的std::string类表示。1.C风格字符串C风格字符串是一个以空字符(\0)结尾的字符数组。以下是......
  • C++惯用法:do...while(0)的妙用
    目录1.引言2.do...while(0)消除goto语句3.用do...while(0)包裹复杂的宏4.防止意外错误5.避免变量作用域问题1.引言        在C++中,do...while(0) 通常是用来做循环用的,然而我们做循环操作可能用for和while要多一些。经常看到一些开源代码会出现do...while(0)......
  • [C++]哈希
    一、概念在顺序结构以及平衡树中,元素关键码(key)与其存储位置之间没有对应的关系,因此在查找一个元素时,必须要经过关键码(key)的多次比较。顺序查找时间复杂度为O(N),平衡树中为树的高度,即O(log2N),搜索的效率取决于搜索过程中元素的比较次数。理想的搜索方法:可以不经过任何比较,一......
  • 封装C++项目为dll
    这是头文件,定义了一个接口类IMyInterface。#pragmaonce#ifndefMY_INTERFACE_H#defineMY_INTERFACE_H#define_CRT_SECURE_NO_WARNINGS#defineMY_DLL_API__declspec(dllexport)//定义导出到DLL中的宏//接口类,用于导出到DLLclassMY_DLL_APIIMyInterface{pub......
  • auto关键字
    作用:能自动推断出是什么数据类型代码示例:autoname()//能判断出返回值时字符串类returnstd::string("hhh");弊端:对变量类型不明确,可能会破坏依赖特定类型的代码比如字符串类的.strlen()什么时候用:当类型过长时intmain(){std::vector<std::string>strings;strin......
  • C++嵌入式压缩库bundle基础操作:内存压缩与zip文件操作
    bundle是一个轻量级的C++压缩库,集成在一对简洁的文件中(bundle.h和bundle.cpp),支持内存数据的压缩与解压缩,以及zip格式文件的操作,方便嵌入到C++程序中执行压缩、解压缩操作。本文将详细介绍如何使用bundle库进行高效的数据压缩处理。简介bundle库支持多种压缩算法,使用std::string......
  • 高质量C/C++编程指南总结(四)—— 表达式和基本语句
    1.运算符优先级如果代码行中的运算符比较多,用括号确定表达式的操作顺序,避免使用默认的优先级。 2.复合表达式不要编写太复杂的复合表达式。不要有多用途的复合表达式。不要把程序中的复合表达式与“真正的数学表达式”混淆。 3.if语句不可将布尔变量直接与 ......
  • 高质量C/C++编程指南总结(三)—— 命名规则
    标识符应当直观,可望文知义。标识符的长度应当符合“min-length&& max-information”原则。命名规则尽量与所采用的操作系统或开发工具的风格保持一致。程序中不要仅靠大小写区分相似的标识符。程序中不要出现标识符完全相同的局部变量和全局变量。变量的名字应当使用“......
  • C++ PImpl模式、指向实现的指针、PImpl Idiom、隐藏实现细节
    C++PImpl模式、指向实现的指针、PImplIdiom、隐藏实现细节flyfishPImpl全称是“PointertoImplementation”,在中文中通常翻译为“指向实现的指针”或者“指向实现”。PImpl是一种编程技巧,通常用于C++中,通过这种技术,可以隐藏类的实现细节,达到信息隐藏和二进制兼容......
  • C++ 面试宝典之:空类大小究竟是不是 0?
    以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「ENG八戒」https://mp.weixin.qq.com/s/pD4bIjX2kDzo8gbYRPktPQ首先,空类是什么?空类指的是不包含任何数据成员的类,但可能包含方法成员。实例化时,对象需要分配存储空间用于存放数据成员,数据成员的大小和数量......