将局部变量声明为const

Ben*_*Ben 7 c# const

显然,将局部变量声明为const,可以防止运行时修改.Const实例变量是静态的(我相信).这是否与const局部变量的性质和用途有关?(例如穿线)

Adr*_*ong 15

A const不是变量,这就是它被称为常量的原因.

  • @Ben:就C#而言,维基百科是错误的.在C#中,常量不是任何变量.变量在C#中定义为存储位置,其内容可以变化.常量既不是存储位置,也不会变化. (17认同)
  • 来自维基百科"常数是一种特殊的变量".http://en.wikipedia.org/wiki/Constant_(programming).在OQ中懒惰使用术语的道歉. (4认同)
  • @Eric,好的,我尊重你的知识.谢谢你的澄清.向阿德里安道歉. (2认同)

sth*_*lik 11

"const"变量必须具有基本类型(例如int,bool).每当源代码中出现"const"变量时(无论是本地变量还是全局变量),此实例都将替换为const值本身.所以:

const int foo = 42;
return foo + 69;
Run Code Online (Sandbox Code Playgroud)

优化后变为:

return 42 + 69
Run Code Online (Sandbox Code Playgroud)

更确切地说:

return 111;
Run Code Online (Sandbox Code Playgroud)

没有线程问题,因为const变量具有原始类型,并且它们仅在编译时存在.

  • 第三,我不明白什么是原始类型或在编译时知道什么与线程有关.常量不是线程安全的"因为它们是原始类型".常量是线程安全的*因为根据定义它们不能改变*因此从未被观察到在两个不同的线程上具有不一致的值. (6认同)
  • 这个答案有很多错误.首先,"常量变量"是矛盾的; 常量永远不是变量,因为变量是*存储位置*,包含可以更改的值,常量是*值*(不是存储位置),*不能*更改. (2认同)
  • 其次,常量不需要是"原始"类型.常量可以是任何内置值类型(int,short等),或任何字符串常量,或任何引用类型的空引用. (2认同)

Guf*_*ffa 9

常量不是变量,实际上并不存储在任何地方.因为它没有存储,所以它不是实例成员,并且它不是静态的.

常量只是值的名称.编译代码时,会在使用常量的位置插入值.(如果你使用一个不同的装配宣布为常数.改变常数的声明价值不会改变使用,直到你重新编译使用恒定码值.这具有意义.)

因此,在本地声明的常量与其他任何地方声明的常量完全相同,它只是范围不同.