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

时间:2014-04-15 12:03:49

标签: c++ c++11

//在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

Static Const& amp; 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

1 个答案:

答案 0 :(得分:2)

首先,如果您将某些内容声明为const,则表示您无法更改它。所以没有你不能在运行时分配给它。但是,您可以在初始化中调用您的函数:

static const int COS_MAX = getCosMaxFromFile();

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

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