Thanks a bunch for responding!
Got few questions though...
"Gianni Mariani" <> wrote in message
news:bj96to$...
> Marcin Vorbrodt wrote:
> > So I have a class Math that looks like this:
> >
> > Math {
> > public:
> > static Real PI(void);
> > };
> >
> > Real Math:
I(void) {
> > return 4.0 * atan(1.0);
> > }
>
> This one would do more like what you want. It is computed on demand the
> first time Math:
I is called and only the first time.
>
> Real Math:
I(void) {
> static Real pi = 4.0 * atan(1.0);
>
> return pi;
> }
>
Makes sense, a friend just made that sugestion to me few minutes ago
actually.
>
> >
> > The problem is, that this is a class with only static methods. All the
class
> > has are just some methods that return certain constants, it also has
statics
> > for trig functions. A friend pointed out, that it might not be such a
great
> > design. On the other hand, i dont want to use this:
> >
> > static const Real PI = 4.0 * atan(1.0);
> >
>
> I don't think you want static const Real PI. A static variable has to
> do with a deprecated C functionality.
>
Deprecated C functionality. Please explain. What exactly would be a meaning
of static const variable in C++ land versus just const variable defined at
global scope.
> const Real PI = 3.14159...;
>
> is a whole lot faster. Just compute the constants and slap them into
> the text. What's wrong with that - they are constants after all !
>
Real is now typedef float real. It might be double in the future. Thats why
i dont want to hardcode a value into const Real PI variable.
> A constant initialized with a constant expression ( no function calls -
> like to atan ) is initialized at compile time. You can be guarenteed
> they are set from the time the executable is loaded.
>
>
> #include <cmath>
>
> class A
> {
> public:
>
> static const double pi ;
>
> };
>
> // initialized at compile time
> const double A:
i = 3.141L;
>
> // initialized at compile time
> const double AnotherPI = 3.141L;
>
> // initialized at compile time when executable is loaded
> const double AnotherPI2 = 4 * atan( 1.0 );
>
The problem with this is (I think)...
If at some later time i create another static const variable in some other
class like this:
OtherClass {
public:
static const Something = Math:

I + 3; // just for the sake of this
example

};
that at the time i create Something variable, PI might not yet been
initialized.
Or does that problem not apply to primitive types?
I had this happen to me before with such code:
Vector::UNIT_X; was a static const devined in vector class, and
CoordinateSysten::GLOBAL; was constructed using Vector::UNIT_X, Y, Z, etc
and on some compilers that would work, but on some, at the time of GLOBAL
initialization, UNIT_X vector was not yet initialized.
Thanks for you help!
Martin