Re: What use do you have in using constants over variables?
On Dec 5, 12:31 pm, amun25dringe...@gmail.com wrote:
I hear people talking about like:
const float PI=3.14;
that
and they say you can only change it in one place
but why do you need it if you can use it in a variable
ex.
float PI=3.14;
and then I can assign it to another float;
for(int pi=PI;;pi++)
and if you change the value of PI then the value of pi will
change as well;
And you consider that an advantage?
Can you please tell me what uses for constants I am missing?
Basically, it says that the value won't change. I've had
constants that later became variables, read from a configuration
file. It happens. (But I have my doubts about a program which
decides to make the value of pi configurable.)
If the type is integral, and the initialization expression is
also constant, there are significant differences; the constant
is an "integral constant expression", which is required in a
certain number of cases: the dimensions of a C style array, as a
non-type argument for a template, etc. In such cases, the use
of "const" goes beyond being simply a compiler enforced
documentation; it plays an important role in the language
itself.
Also, const is part of the type system. In the case of class
types, in particular, it plays an important role in things like
overload resolution. Thus, for example, if I have:
std::vector< int > v1 ;
std::vector< int > const v2 ;
v1.begin() and v2.begin() have different types.
Finally, in cases where the compiler can see the actual object
declaration, const can play an appreciable role in optimization.
This is probably most important for constants of integral types
as well, but I suspect that most compilers can also benefit from
floating point constants: if you write something like 2*pi, and
pi is a constant, the compiler will fold the expression,
replacing it with the results. If pi is not a constant, the
compiler will probably have to read it and do the multiplication
each time it encounters the expression.
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34