Cherno C++ P21 C++中的静态(static)

C++中的静态(static)

YouTube视频链接
本文是ChernoP21视频的学习笔记,P20编写了一个简单的C++类。
  static关键字在C++中有两个含义,这取决上下文。一个是在类或结构体外部使用static关键字,另一种是在类或结构体内部使用static关键字。
  类或结构体外部的static,意味着声明为static的符号,链接将只在内部,它只对我们定义它的翻译单元可见。在类或结构体内部的静态变量(static),意味着该变量实际上将与类的所有实例共享内存,静态变量只有一个实例。本文首先讨论在类或结构体外部使用static关键字。

类或结构体外部使用static关键字

  Static.cpp代码如下

static int s_Variable = 5;

  我们使用惯例s_来表示这个变量是静态的,由于关键字static,这个变量s_Variable只会在这个翻译单元内部链接。静态变量或函数意味着,当需要将这些函数或变量与实际定义的符号链接时,连接器不会再这个翻译单元的作用域之外,去寻找那个符号定义。
Cherno C++ P21 C++中的静态(static)_第1张图片  若不使用静态变量,则会出现链接的错误。
Cherno C++ P21 C++中的静态(static)_第2张图片  因为这个s_Variable变量已经在另一个翻译单元(Main.cpp)中定义了,所以我们不能有两个同名的全局变量。
  一种修改的方式是修改Main.cpp中这个变量的实际指向,我们去掉这里的赋值,标识这个变量为extern,这意味着它会在外部翻译单元中寻找s_Variable变量。
Cherno C++ P21 C++中的静态(static)_第3张图片  如果我重新把Static.cpp里的变量标记为静态,这有点像在类中声明一个私有变量,其余所有的翻译单元都不能看到这个s_Variable变量,链接器在全局作用域下也不会看到。此时我们编译Main.cpp。
Cherno C++ P21 C++中的静态(static)_第4张图片  我们会得到一个未解析的外部符号的错误,因为在任何地方都找不到名称为s_Variable的整型变量。

你可能感兴趣的:(C++,c++,开发语言,后端)