静态变量声明和定义
Static variable declaration and definition
请考虑以下代码:
#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( 中。通过定义静态变量,您可以告诉编译器使用哪个转换单元将静态变量放在那里。
相关文章:
- 如何确保C++函数在定义之前声明(如override关键字)
- 为什么在定义函数之前先声明它
- 为什么我不能在一个类的不同行中声明和定义成员变量?
- Visual Studio中的函数声明和函数定义问题
- C++错误C2600:无法定义编译器生成的特殊成员函数(必须首先在类中声明)
- 如何在标头中声明(或定义)函数的问题
- 程序顶部的声明与定义(最佳实践)
- 类的前向声明之后的类成员函数定义,在类声明之前
- 静态变量声明和定义
- C++ G++ 编译器 - 错误:隐式声明的定义
- C++:错误重定义和先前声明
- 类模板静态数据成员定义/声明/初始化
- 只有一个定义/声明时标头声明变量的多堆定义错误
- OpenCV - Ptr 语法和类定义/声明 - 混淆?
- 如何为非类型模板类的专用化定义声明之外的方法
- 我如何防止静态类成员变量需要两个定义/声明
- 默认定义声明的详细程度不完整
- C++:非成员函数的定义/声明的位置
- 将比较操作符的重载定义/声明为库中的非成员函数
- C++头重新定义/声明混合