静态变量声明和定义

Static variable declaration and definition

本文关键字:定义 声明 变量 静态      更新时间:2023-10-16

请考虑以下代码:

#include "stdafx.h"
#include <iostream>
class Eelement {
public:
static int m_iVal;
};
int Eelement::m_iVal = 33;
int main()
{
//...
return 0;
}

问:
为什么在静态变量m_iVal初始化期间,我必须第二次在其名称前面加上其类型int(在类定义中第一次(?

int Eelement::m_iVal = 33;

为什么编译器强加这种语法对我来说看起来更像是双重声明而不是其他东西,因为编译器已经知道它的类型(从 Element 类的定义(。

Eelement::m_iVal = 33;

是静态成员的赋值。int不是超浮的,因为只有一个定义:

int Eelement::m_iVal = 33;

为什么编译器强加这种对我来说看起来更像的语法双重声明...

这不是双重声明。在类内部,它是声明,但是当您输入:

int Eelement::m_iVal = 33;

在类之外,它是定义。声明可能出现在不同的翻译单元 (TU( 中。通过定义静态变量,您可以告诉编译器使用哪个转换单元将静态变量放在那里。