如果我知道我不会修改它的值,那么将局部变量声明为“const”会有什么好处吗?
谢谢,
答案 0 :(得分:5)
您通常会在整个解决方案中使用const。但是,在本地范围内使用的好处是,您知道范围中的其他位置,您将不会更改它。而且,如果其他人正在处理此代码,他们也会知道不会更改它。 这使得您的程序更易于维护,因为您只需要维护const(即使它只是在本地范围内)
答案 1 :(得分:5)
声明变量const也将允许编译器进行优化 - 而不是说在堆栈上分配int并将其值放在那里,编译器可能只是直接在代码中使用该值
即以下内容:
const int test = 4;
DoSomething(test);
可以编译为
DoSomething(4);
由编译器
修改:对“常量传播”的回复,因为评论框具有大小限制
使用ildasm检查const和none const之间的优化发布:
代码
int test = 4;
Console.WriteLine(test*2);
编译到
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// Code size 11 (0xb)
.maxstack 2
.locals init ([0] int32 test)
IL_0000: ldc.i4.4
IL_0001: stloc.0
IL_0002: ldloc.0
IL_0003: ldc.i4.2
IL_0004: mul
IL_0005: call void [mscorlib]System.Console::WriteLine(int32)
IL_000a: ret
} // end of method Program::Main
虽然
const int test = 4;
Console.WriteLine(test*2);
优化到
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// Code size 7 (0x7)
.maxstack 8
IL_0000: ldc.i4.8
IL_0001: call void [mscorlib]System.Console::WriteLine(int32)
IL_0006: ret
} // end of method Program::Main
这是在发布中使用2010并进行优化。
我进行了搜索,以了解有关常量传播的更多信息,虽然可行,但当前的编译器并没有像上面提到的那样here
答案 2 :(得分:3)
是。您将保护您的代码不会意外更改此变量。
答案 3 :(得分:3)
当我将布尔标志指示符传递给方法时,我喜欢这样做:
const bool includeFoo = true;
int result = bar.Compute(10, includeFoo);
这对我来说比简单的true / false更具可读性,这需要阅读方法声明来确定其含义。
答案 4 :(得分:2)
将local声明为const将让编译器知道您的意图,因此您将无法在函数的其他位置更改变量的值。
答案 5 :(得分:1)
除了有效的答案之外,您不仅告诉编译器该值不会改变,您还可以快速告诉其他人将查看您的代码。
答案 6 :(得分:0)
视使用情况而定..
例如,
void Foo()
{
const string xpath = "//pattern/node";
new XmlDocument().SelectNodes(xpath);
}
在这种情况下,我认为const声明毫无意义