返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++static的作用解读
  • 935
分享到

C++static的作用解读

C++staticC++static的作用static作用 2023-02-21 12:02:17 935人浏览 泡泡鱼
摘要

目录1. 隐藏2. 保持变量内容的持久3. 默认初始化为 04. 多个对象之间数据共享5. 注意总结1. 隐藏 当同时编译多个文件时,所有未加 static 前缀的全局变量和函数都具

1. 隐藏

当同时编译多个文件时,所有未加 static 前缀的全局变量和函数都具有全局可见性。

下面是一个简单的例子:

假设我们要编译两个文件 a.c 和 main.c

// a.c
char a = 'A';
void msg()
{
    printf("Hello\n");
}
//main.c
int main(void)
{
    extern char a;
    print(“%c ”, a);
    (void)msg();
    return 0;
}

此时程序运行的结果是:

A Hello

而如果在 a 和 msg 定义前加了 static,那么 main.c 就无法使用它们了。利用这一特性可以避免命名冲突。

对于函数来说,static 的作用仅限于隐藏。而对于变量来说,它还有其他作用。

2. 保持变量内容的持久

储存在静态数据区的变量会在程序刚开始运行时完成它唯一的一次初始化,它与全局变量一起储存在静态存储区,只不过 static 的作用域不一定是全局的。

说到底,这其实也可以理解为一种隐藏。

int func(void)
{
    static int count = 10; //仅在初始化时被执行了一次,静态变量只会进行一次初始化
    return count—-;
}

int count = 1;

int main(void)
{
    printf(“global\t\tlocal static\n”);
    for (; count<=10; count++)
    {
        printf(“%d\t\t%d\n”, count, func());
    }
    return 0;
}

3. 默认初始化为 0

全局变量也有这一特点,因为它也存储在静态数据区。

在静态数据区中,所有的字节默认值都是 0x00,利用这一特点可以减少工作量。

如初始化一个稀疏矩阵,就能省去把所有位置置 0 的操作。

4. 多个对象之间数据共享

在类中,静态成员可实现多个对象的数据共享,而且由于隐藏的特点,它也同时保证了安全性。

静态成员的初始化格式:<数据类型><类名>:: <静态成员名>=<值>

  • 初始化在类体外进行,而且前面不加 static,以免与静态变量或对象混淆。
  • 初始化时不加访问权限控制符 private public 等
  • 初始化时用作用域运算符标明它所属的类。由此也可以看出静态数据成员是类的成员,而不是对象的成员。

引用静态数据成员的格式:<类名>:: <静态成员名>

下面是几个例子:

class Point
{
public:
    void output() {}
    static void init()
    {
        x = 0;
        y = 0;
    }
private:
    int x;
    int y;
}

int main(void)
{
    Point:: init();
    return 0;
}

报错,因为非静态数据成员此时还没有分配内存。

class Point
{
public:
    void output() {}
    static void init()
    {
        x = 0;
        y = 0;
    }
private:
    static int x;
    static int y;
}

int main(void)
{
    Point:: init();
    return 0;
}

报错,因为静态成员变量需要进行初始化。

5. 注意

类的静态成员函数属于整个类,因此没有 this 指针,这就导致了它仅能访问静态数据和静态成员函数。

不能将静态成员函数定义为虚函数。

对静态成员进行取地址操作会有些特殊,变量地址是指向其数据类型的指针,函数地址类型是一个 “nonmember 函数指针”。

由于没有 this 指针,所以相当于 nonmember 函数,这就有一个好处:成为一个 callback 函数,使得我们将 c++ 和 C-based X Window 系统结合,也成功应用于线程函数身上。

父类和子类共享静态成员。为了防止父类的影响,可以在子类中定义一个与父类相同的静态变量,以屏蔽父类的影响。这不会引起错误,因为编译器采用了 name-mangling 方法以生成唯一的标志。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: C++static的作用解读

本文链接: https://lsjlt.com/news/196899.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++static的作用解读
    目录1. 隐藏2. 保持变量内容的持久3. 默认初始化为 04. 多个对象之间数据共享5. 注意总结1. 隐藏 当同时编译多个文件时,所有未加 static 前缀的全局变量和函数都具...
    99+
    2023-02-21
    C++ static C++ static的作用 static作用
  • static在c++中的作用
    static++ 在 c++ 中的作用 在 C++ 中,static 关键字用于控制变量、函数和类的作用域和生命周期。 变量 在函数内部声明为 static 的变量称为静态局部变量。 ...
    99+
    2024-05-06
    c++ 作用域
  • C++ static的作用是什么
    这篇“C++ static的作用是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++ static...
    99+
    2023-07-05
  • c++中static的作用和用法
    c++ 中的 static 关键字用于声明静态变量、函数或类成员,使其在程序生命周期内存在或与类的每个实例关联。具体用法如下:静态变量:在函数外声明,仅创建一份副本,在程序启动时初始化且...
    99+
    2024-05-14
    c++
  • c++中static的用法和作用
    c++ 中的 static 关键字用于修改变量、函数和类成员,指示编译器保留其作用域和存储持续时间。其用法包括:声明 static 变量以保留函数调用或对象销毁后的值。声明 static...
    99+
    2024-05-08
    c++ 作用域
  • c++中static的作用是什么
    在C++中,`static`关键字有以下几种作用:1. 静态变量:在函数内部声明的静态变量在程序运行期间只被初始化一次,并且在函数运...
    99+
    2023-10-12
    c++
  • c++中static关键字的作用
    在 c++ 中,static 关键字用于声明变量或函数,使其仅在声明的范围内可见,在程序启动时分配内存,并且保持不变。此外,它还允许跨函数和文件共享数据、存储常量、创建静态局部变量并定义...
    99+
    2024-05-15
    c++ 作用域
  • static在c语言中的作用
    static关键字在c语言中用于限制变量的作用域和生命周期。限制文件局部变量的作用域,使其只在本文件中访问。限制函数局部变量的作用域,使其只在本函数中访问。使得文件作用域变量在程序运行期...
    99+
    2024-05-02
    c语言 作用域
  • C++static详解,类中的static用法说明
    目录C++static详解,类中static用法static特点:用来控制存储方式和可见性类中的static关键字什么时候用static?为什么要引入static?c++中stati...
    99+
    2024-04-02
  • c语言static的作用有哪些
    C语言中的static关键字有以下几种作用:1. 限制作用域:在函数内部使用static修饰局部变量,可以将其作用域限制在函数内部,...
    99+
    2023-09-11
    c语言
  • static在c++中的作用是什么
    在C++中,关键字static有以下几种作用:1. 修饰变量:当static修饰一个局部变量时,该变量在程序的生命周期内只被初始化一...
    99+
    2023-08-31
    c++ static
  • C/C++ extern和static的使用详解
    目录前言externstaticc++ static members in class总结前言 在讲到extern和static的时候先了解一下定义和声明的基本概念 定义(defin...
    99+
    2024-04-02
  • C#中Static修饰的作用是什么
    这篇文章将为大家详细讲解有关C#中Static修饰的作用是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.类的静态成员:classA  {  p...
    99+
    2023-06-18
  • C 语言中 static 的作用是什么
    这篇文章给大家介绍C 语言中 static 的作用是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。static 用来说明静态变量。如果是在函数外面定义的,那么其效果和全局变量类似,但是,static定义的变量只能在...
    99+
    2023-06-03
  • C++中static修饰符的详解及其作用介绍
    目录概述静态数据成员引用静态数据成员用类名访问数据成员静态成员函数综合案例概述 static (静态) 修饰符是用来控制变量的存储方式和可见性的. 静态局部变量存储在静态区域: s...
    99+
    2024-04-02
  • c++中static的用法
    摘要:c++ 中的 static 关键字用于声明具有静态存储持续期的变量、函数和类成员。静态变量在整个程序生命周期内都存在,静态函数仅限于访问当前文件中的数据,静态数据成员在所有对象之间...
    99+
    2024-05-06
    c++
  • C/C++中的static关键字详解
    目录C/C++ 中的 static1. 静态局部变量2. 静态全局变量3. static 修饰函数C++的 static 成员静态成员变量 静态成员函数总结:static是...
    99+
    2024-04-02
  • c语言关键字static的作用是什么
    在C语言中,关键字static有以下几种作用:1. 静态变量:static关键字可以用于声明静态变量,静态变量存储在静态存储区,在程...
    99+
    2023-09-14
    c语言 static
  • static在c++中的用法
    static是c++中的一个关键字,用于声明变量、函数和类成员,拥有以下特性:变量:只有一份副本,在启动时初始化,在结束时销毁,即使未被使用也占内存。函数:只能访问本函数中的变量,不能重...
    99+
    2024-05-14
    c++ 代码可读性
  • C语言中static关键字的作用是什么
    本篇内容介绍了“C语言中static关键字的作用是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!static这个关键字是“静态”的意思,...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作