Topic: C++, Bjarne stroustrup, #define, evaluation order, ...
Author: andrew@resam.dk (Leif Andrew Rump)
Date: 24 Jun 91 12:48:57 GMT Raw View
I've got my hands on Borland C++ (2.0) and I love it (not Borland, but
C++ - well ok bc is also really nice :-) ). I've been reading some books
to really get the spirit and I've stumpled into some things that I don't
like and I also have some questions:
In "The C++ Programming Language" by Bjarne Stroustrup (December 1986,
it's not the updated C++ version (2.0 or 2.1)) he states on page 87:
a*(b/c) could well be calculated as (a*b)/c
Is this (still) the case? I tried the following:
int a = 16000;
int b = 10;
int c = 5;
on bc a*(b/c) worked as expected and gave 32000 and (a*b)/c
gave (0x27100 / 5 -> 0x7100 / 5): 5785 i.e. overflow loss.
I was a bit surprised when this didn't compile:
for (int i = 0; i < 10; i++)
...
for (int i = 0; i < 10; i++)
Instead it is:
for (int i = 0; i < 10; i++)
...
for (i = 0; i < 10; i++)
hmmm! I know that i is not in a "block" but ...
On page 131 he states:
Here are some plausible macros:
#define Case break; case
#define nl << "\n"
#define forever for (;;)
...
Here are some completely unnecessary macros:
#define PI 3.141593
#define BEGIN {
#define END }
Should BEGIN & END be enumerated types or what is wrong with them?
(NOTE: I don't use them even though I'm a Turbo Pascal programmer,
but I do something similar as described below).
I've brought the following from TP5.5 (and define it in andrew.h):
#define constructor
#define destructor ~
This way I can write a class like this:
class object
{
name_t name;
public :
constructor object(name_t name)
{
object::name = new char[strlen(name) + 1];
strcpy(object::name, name);
}
...
destructor object(void)
{
delete name;
}
}
Does all C++-compilers allow the ~ to be separated from the class name,
like: ~ object(void) as it is expanded above.
Also I overloaded: hex, oct & dec with hex(int, len = 0), ... like the
old iostream. Why was they removed.
Any comments?
Leif Andrew Rump, AmbraSoft A/S, Stroedamvej 50, DK-2100 Copenhagen OE, Denmark
UUCP: andrew@ambra.dk, phone: +45 39 27 11 77 /
Currently at Scandinavian Airline Systems =======/
UUCP: andrew@resam.dk, phone: +45 32 32 51 54 \
SAS, RESAM Project Office, CPHML-V, P.O.BOX 150, DK-2770 Kastrup, Denmark
If it's broke, fix it (The MS-DOS way)
If it aint broke, don't touch it (The Unix way)
If we can't fix it, it ain't broke (Maintainer's Motto)
If you can't fix it, fuck it (The U-boat way)