How is "static const int" better than "static enum"?

A

Ajax Chelsea

can not the "static const int" be replaced by "static enum" anywhere?

is it necessary that define special initialization syntax for "static const int"?
 
P

Phlip

Ajax said:
can not the "static const int" be replaced by "static enum" anywhere?

enum is a type, not a variable, so it needs no 'static' storage category.

'int' has an implementation-defined size, and its type is compatible with
variable ints.

'enum' is only guaranteed to have enough bits to store any value used in
their definition.

For a while, compilers could not treat 'static const int' inside a class as
a compile-time constant, and so one couldn't size arrays with it and such.
Using 'enum' as a scalar instead of a typed flag was an easy work-around.
is it necessary that define special initialization syntax for "static
const int"?

?

Constant static data are the only things that can declare inside a class.
This (I suspect) grants them their compile-time constant status.

This is all well-formed, with defined behavior:

class yo { public:
static int z (42);
};

char whatever[yo::z];

But an enum would have worked the same, too.
 
R

Rob Williscroft

Phlip wrote in
This is all well-formed, with defined behavior:

class yo { public:
static int z (42);
};

char whatever[yo::z];

But an enum would have worked the same, too.

Also if you also want to use the static integral constant in a
non-compile-time context you also need a definition outside the class,

/* Not in a header file (templates aside)
*/
int yo::z; /* Note no initializer */

int main()
{
int z = yo::z;
int const *zp = &yo::x;
}

enum's don't have this requirment, which is perhapse one way in which
enum's are "better" than static int const's.

Cranking the level of triviality up a notch. An instance of an enum
can also be a static integral constant,

#include <iostream>

struct A
{
enum B { C, D, E };
static B const b = A::E;
};

A::B const A::b;

int main()
{
std::cerr << A::b << "\n";
}

Rob.
 
A

Ajax Chelsea

Rob Williscroft said:
Cranking the level of triviality up a notch. An instance of an enum
can also be a static integral constant,

#include <iostream>

struct A
{
enum B { C, D, E };
static B const b = A::E;
};

A::B const A::b;

int main()
{
std::cerr << A::b << "\n";
}

Rob.

so I consider that it is not necessary to specialize syntax of "static
const int(long...)", haha
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top