Thanks a bunch for responding!
Got few questions though...
"Gianni Mariani" <gi*******@mariani.ws> wrote in message
news:bj********@dispatch.concentric.net...
Marcin Vorbrodt wrote: So I have a class Math that looks like this:
Math {
public:
static Real PI(void);
};
Real Math::PI(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::PI is called and only the first time.
Real Math::PI(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::pi = 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::PI + 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