显然,将局部变量声明为const
可以防止运行时修改。我相信const
实例变量是静态的。这是否对const
局部变量的性质和用途有任何影响?(例如多线程)
"const"变量必须具有原始类型(例如int,bool)。无论是本地还是全局的,每当“const”变量出现在源代码中时,该实例都将被替换为const值本身。因此:
const int foo = 42;
return foo + 69;
优化后变成:
return 42 + 69
或者说:
return 111;
由于const变量具有基本类型并且它们仅在编译时存在,因此不存在线程问题。
常量不是变量,也不会被实际地存储。由于它没有被存储,所以它既不是实例成员,也不是静态成员。
常量只是表示一个值的名称。当代码被编译时,该值会被插入到使用常量的位置。(如果您在另一个程序集中声明了一个常量,则更改常量的声明值不会更改使用该常量的值,直到重新编译使用常量的代码。)
因此,本地声明的常量的工作方式与在其他任何地方声明的常量完全相同,只是范围不同而已。
const
并不是一个变量,这就是为什么它被称为常数。
const int foo = 42;
const double H = 1.23e-2, Q = 7.65e-4, nu = 0.3;
const double Reynolds = H*H*H*H / Q / (1d - nu);
local-constant-declaration 声明一个或多个本地常量。
local-constant-declaration:
const type {constant-declarators ,} constant-declarator
constant-declarator:
identifier = constant-expression
并且:
7.19 常量表达式
constant-expression 是可以在编译时完全计算的表达式。
constant-expression:
expression
...
只要表达式满足上述要求,即使表达式是包含非常量结构的较大表达式的子表达式,该表达式也会在编译时计算。
欢迎对此“quanser”提供任何反馈:^)
const
像C++宏一样执行并在代码中丢弃整个未计算的表达式,每个单独的表达式都将被计算为一个单一的常量值在编译时。 在将值放置在其使用的任何地方之前进行一次计算将加快编译时间(我确信它会这样做),但它不会对程序的执行速度产生任何影响。 - Servy由于每次方法调用都会创建自己的堆栈区域,因此拥有自己的局部变量,您不必担心其他线程修改局部变量。
据我所知,在C#中将局部变量创建为const不会创建任何变量或字段,而是在您在方法内部使用它的任何地方都会内联放置分配的常量值。
本地使用const
的主要优点是,您不会意外地将标识符设置为另一个值,这可能会改变代码的正确性。
const int Value1 = 1;
const int Value2 = 2;
使用 var 声明的常量(匿名类型属性值在创建后无法更改):
var constants = new {
Value1 = 1,
Value2 = 2,
};
//use as constants.Value1