C++中的static变量

简介: 虽然是老生常谈,但下面这篇文章还是概括地很全面的。 C++中的static有以下三种不同的效果: 当用于成员变量时,表示它将由类分配管理而不是实例。
虽然是老生常谈,但下面这篇文章还是概括地很全面的。

C++中的static有以下三种不同的效果:
  1. 当用于成员变量时,表示它将由类分配管理而不是实例。
  2. 当在一个函数中时,数据将会被静态分配,在函数第一次被调用时初始化,且一直存在到程序退出。它当然也仅在当前函数中可用。这个特性经常被用于单例的延迟建构。 
  3. 当在一个编译单元中(如源文件),它可以在本单元中视为全局的,但对于其它单元却是不可见的。

第三种情况会在无命名空间中允许类定义中并未导出的声明 (Use (3) is somewhat discouraged in favor of unnamed namespaces that also allows for un-exported class declarations.)

第二种情况和类或实例无关,只是一个函数所拥有的变量,而且仅有一份。


但是确实有一种情况下,会使得函数中的静态变量不止一份。对于模板函数而言,函数自身在程序可能会存在多份,当然这和类与实例无关。下面是一个示例:
#include<stdio.h>

template<int num>
void bar()
{
    static int baz;
    printf("bar<%i>::baz = %i\n", num, baz++);
}

int main()
{
    bar<1>(); // Output will be 0
    bar<2>(); // Output will be 0
    bar<3>(); // Output will be 0
    bar<1>(); // Output will be 1
    bar<2>(); // Output will be 1
    bar<3>(); // Output will be 1
    bar<1>(); // Output will be 2
    bar<2>(); // Output will be 2
    bar<3>(); // Output will be 2
    return 0;
}

原文(Stack Overflow):  Static variables in class methods


目录
相关文章
|
25天前
|
存储 C++ 容器
学会在 C++ 中使用变量:从定义到实践
C++中的变量是数据容器,包括`int`、`double`、`char`、`string`和`bool`等类型。声明变量时指定类型和名称,如`int myNum = 15;`。`cout`与`&lt;&lt;`用于显示变量值。常量用`const`声明,值不可变。变量名应唯一,遵循特定命名规则,常量声明时需立即赋值。
112 1
|
29天前
|
编译器 C++
C++ 双冒号::开头的语法,::变量名,获取全局作用域变量
C++ 双冒号::开头的语法,::变量名,获取全局作用域变量
16 0
|
1月前
|
存储 C++
C++系列三:变量、常量
C++系列三:变量、常量
|
1月前
|
存储 C++
C++的变量和常量
C++的变量和常量
13 1
|
3天前
|
C++
【C++成长记】C++入门 | 类和对象(下) |Static成员、 友元
【C++成长记】C++入门 | 类和对象(下) |Static成员、 友元
|
11天前
|
存储 程序员 编译器
C++注释、变量、常量、关键字、标识符、输入输出
C++注释、变量、常量、关键字、标识符、输入输出
|
25天前
|
安全 算法 编译器
【C++ 基础 ()和{}括号】深入探索 C++ 的变量初始化:括号和大括号的奥秘
【C++ 基础 ()和{}括号】深入探索 C++ 的变量初始化:括号和大括号的奥秘
36 0
|
25天前
|
算法 编译器 C++
【C++ 关键字的混合使用 】C++深度探索:auto、static、constexpr的交互影响与应用
【C++ 关键字的混合使用 】C++深度探索:auto、static、constexpr的交互影响与应用
31 0
|
25天前
|
存储 算法 安全
【C++ 泛型编程 C++14 新特性】理解C++14变量模板的魅力与应用
【C++ 泛型编程 C++14 新特性】理解C++14变量模板的魅力与应用
42 2
|
30天前
|
算法 Linux 调度
C++ std::condition_variable 条件变量类探索:解锁条件变量的底层原理
C++ std::condition_variable 条件变量类探索:解锁条件变量的底层原理
18 0