常数的好处

ona*_*000 14 programming-languages constants

我理解有关常量的一个重要事项是你不必经历并更新代码,在那里使用该常量.多数民众赞成,但是我们说你没有明确地宣布它为常数.如果HAPPENS实际上没有被改变并且使其成为常数,那么存在什么好处(s)是否会节省处理和/或代码的大小等等?

基本上我有一个程序,编译器说一个特定的变量没有改变,因此可以声明为常量,我只是想知道添加常量限定符对它有什么好处,如果它没有区别那么制作这种变化没有增加任何价值,因此没有浪费时间(同样的情况发生在多个地方)回去并"修复"所有这些变量.

swe*_*rup 22

如果将变量声明为常量,那么优化器通常可以通过"常量折叠"来消除它,从而加速程序并节省空间.举个例子,考虑一下:

var int a = 5;
const int b = 7;
...
c = process(a*b);
Run Code Online (Sandbox Code Playgroud)

编译器最终将创建一个指令,将a乘以7,并将其传递给'process',将结果存储在c中.但在这种情况下:

const int a = 5;
const int b = 7;
...
c = process(a*b);
Run Code Online (Sandbox Code Playgroud)

编译器将简单地传递35进行处理,甚至不编码乘法.另外,如果编译器知道该进程没有副作用(即,是一个简单的计算),那么它甚至不会调用进程.它只是将c设置为进程(35)的返回值,为您节省函数调用.


小智 21

如果你将某些东西声明为常量,然后不小心尝试在代码中修改它的值,编译器会告诉你你的错误.这种形式的静态类型检查实际上是使用常量的主要原因.


3Da*_*ave 7

这很大程度上取决于优化器的好坏程度.

一个好的优化器将在编译期间用文字值替换const引用.这节省了处理器周期,因为生成的机器代码使用立即值而不必从内存加载值.

某些优化器会识别出一个值在声明后不会被修改,并将其转换为常量.不要依赖这种行为.

此外,只要有可能,您的代码应该强制执行您在开发过程中所做的假设.如果永远不应该更改"变量",则将其声明为常量将有助于确保您自己或后来出现的任何其他开发人员都不会无意中修改"常量".