Variables 常数与不变变量?
使用常量(不可更改)比不更改变量有什么好处吗?根据您的语言和编译器,常量在构建时可能会内联并优化。变量可能会占用堆栈空间,即使它从未更改。通过使值为常量,编译器可以直接替换它。例如,如果您有Variables 常数与不变变量?,variables,constants,Variables,Constants,使用常量(不可更改)比不更改变量有什么好处吗?根据您的语言和编译器,常量在构建时可能会内联并优化。变量可能会占用堆栈空间,即使它从未更改。通过使值为常量,编译器可以直接替换它。例如,如果您有x/2,编译器可以计算该值并使用它,而不必发出代码来检索x的值,然后将其除以2 此外,您不必担心会意外更改值。例如,在类C语言中,当您指的是if(x==2)时,您可能会意外地键入if(x=2),这将改变x的值,如果它是一个变量。将来维护代码的任何人(包括您)都不必四处查看(如果在任何地方)当发现一个bug或添
x/2
,编译器可以计算该值并使用它,而不必发出代码来检索x
的值,然后将其除以2
此外,您不必担心会意外更改值。例如,在类C语言中,当您指的是
if(x==2)
时,您可能会意外地键入if(x=2)
,这将改变x
的值,如果它是一个变量。将来维护代码的任何人(包括您)都不必四处查看(如果在任何地方)当发现一个bug或添加一个特性时,常量会被更改——他们会马上知道它是不能更改的。在某些程序语言中,声明某个常量将允许编译器进行优化,否则这是不可能的。此外,将某些内容声明为常量可能是记录代码中某些位置在值更改时可能被破坏的有用方法
不幸的是,有些编程语言有时会对声明为常量的东西做坏事。例如,在某些.net语言中,如果一个声明为只读的值类型通过可修改引用传递,编译器不会拒绝允许这样的操作,而是复制并传递该值类型。这种隐式复制会降低效率,并可能导致意外的语义。啊,我想这是有道理的。谢谢你澄清:)