C++中静态Const和Const变量在全局和类中的行为
Behaviour of Static Const and Const Variables in Global and in Class in C++
//在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
变量,则意味着包含该头文件的每个源文件都将定义该变量。不过,它不会导致链接器错误,因为变量在每个翻译单元之外都不可见。
相关文章:
- 在内存不足之前,我可以声明多少个 const 变量?
- 当设置为 const 变量时使用 nullptr
- 声明与 const 变量和成员函数相同的标识符
- const变量是否可以在具有默认值的参数中赋值(作为可选参数)
- 编译器在传递 const 变量时返回错误:模板参数不是常量表达式
- 在成员函数之间传递const变量为数组的索引
- 为什么静态常量字符 * const 变量在为左值时可绑定到右值引用参数
- C 编译器可以执行用于返回值的命名const变量的RVO
- 如何访问一系列const变量作为const数组
- C 错误C3892:您无法分配const变量
- 是否可以在C++中推迟 const 变量的初始化,例如 Java 的"blank final"功能?
- 为什么将FMTFLAG指定两次 - 作为枚举的一部分,而另一个实例为静态const变量
- 使用非const变量代替所需的const变量(C )
- 使用const变量时,非静态数据成员的使用无效
- 定义,初始化全局const变量是安全的吗?
- const vs non-const变量一旦分配就没有变化
- 为什么设置const变量(将以相同的值存储)会导致不同的结果
- CPP中的私有静态常规成员变量与const变量
- 在避免新分配的同时,const变量的复杂初始化
- 如何通过其地址更改const变量的值