C++中静态Const和Const变量在全局和类中的行为

Behaviour of Static Const and Const Variables in Global and in Class in C++

本文关键字:Const 变量 静态 C++ 全局      更新时间:2023-10-16

//在Globals.hpp 中

const int SINE_MIN = 0;    // only CONSTANT
const int SINE_MAX = 1;    // only CONSTANT
static const int COS_MIN = 1;   // STATIC CONSTANT
static const int COS_MAX = 0;   // STATIC CONSTANT

StaticConst&Const变量?

如果在类中声明了相同的变量。

class SomeClass 
{
    const int SINE_MIN = 0;    // only CONSTANT
    const int SINE_MAX = 1;    // only CONSTANT
    static const int COS_MIN = 1;   // STATIC CONSTANT
    static const int COS_MAX = 0;   // STATIC CONSTAN 
}

我想在运行时将值设置为COS_MAX = getCosMaxFromFile(),之后不应该更改,所以将其设为Const

首先,如果您将某个东西声明为const,则意味着您不能更改它。因此,不,您不能在运行时分配给它。然而,您可以在初始化中调用您的函数:

static const int COS_MAX = getCosMaxFromFile();

现在,关于static和非static变量之间的区别,它取决于变量的定义位置:如果它是在文件全局范围或函数本地范围中定义的。如果它在文件全局范围内,则static变量仅在当前翻译单元中可用(即仅在该源文件中)。如果它是一个函数局部变量,那么static变量不会像其他(非静态)局部变量一样在调用之间丢失其值。

如果在头文件中定义了全局static变量,则意味着包含该头文件的每个源文件都将定义该变量。不过,它不会导致链接器错误,因为变量在每个翻译单元之外都不可见。