Date: Wed, 6 Mar 2002 20:50:14 +0100 From: Raymond Wiker <Raymond.Wiker@fast.no> To: nate@yogotech.com (Nate Williams) Cc: Raymond Wiker <Raymond.Wiker@fast.no>, Giorgos Keramidas <keramida@ceid.upatras.gr>, Terry Lambert <tlambert2@mindspring.com>, "Steve B." <steveb99@earthlink.net>, freebsd-chat@FreeBSD.ORG Subject: Re: C vs C++ Message-ID: <15494.29430.907768.151847@raw.grenland.fast.no> In-Reply-To: <15494.23822.972400.759310@caddis.yogotech.com> References: <20020305132457.A4700-100000@alpha.yumyumyum.org> <001701c1c481$d0d5eab0$f642d9cf@DROID> <20020305231252.GC5328@hades.hell.gr> <3C8568E0.76415D99@mindspring.com> <20020306032029.GA7926@hades.hell.gr> <15494.13878.219807.949085@raw.grenland.fast.no> <15494.20631.682803.383406@caddis.yogotech.com> <15494.22039.581536.624619@raw.grenland.fast.no> <15494.23822.972400.759310@caddis.yogotech.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Nate Williams writes:
> > And exactly *how* is this helped by using printf instead? If
> > you want to have control of the output using printf, you *still* need
> > access to class members, including (possibly) protected data.
>
> Easy.
>
> class FP
> {
> public:
> FP() { _value = 0.0; }
> FP(double v) { _value = v; }
>
> float getValue() { return _value; }
>
> private:
> float _value;
> }
>
> int
> main()
> {
> FP f(1.0);
>
> printf("Value = %3.2f\n", f.getValue());
>
> return 1;
> }
#include <iostream>
#include <iomanip>
std::cout << setw(3) << setiosflags(ios::fixed) << setprecision(2)
<< f.getValue() << std::endl;
--- this can obviously be simplified (by defining a new iomanipulator).
How would you go about extending printf et al so that you can
use printf to print a description of an object? With iostreams, this
is trivial.
> It's not a transient problem when you can't use it *today*. Try using
> C++ exceptions on *any* released version of FreeBSD.
I've been using exceptions in C++ for two or three years
now. Then again, I have _not_ been using them with threads, which
Terry Lambert mentioned somewhere in this thread.
> Try using it on HP/UX. Try using it on AIX. Try using standard
> containers and see how they behave differently on different releases of
> Solaris.
Have you actually _seen_ this sort of behaviour recently?
> > It's certainly the case that if you don't
> > require your compiler vendor to comply with the standard, they don't
> > really have an incentive to provide these features.
>
> Bingo. If they aren't globally available, then they aren't a standard
> part of the language.
Oh, they are. There is a difference between a language
definition and the lowest common denominator between implementations
:-)
> > Further, if you don't use the advanced features of C++, you may just
> > as well stick to to C.
>
> Naw, it's still C++. All versions of C++ support inheritance, scoping
> protection, object initialization and teardown, as well as
> function/operator overloading. Of the above described features, only
> operator overloading tends to cause strange problems.
I haven't even seen problems with operator overloading. I
think. It is entirely possible that I may remember something later :-)
> > > Safer? The intracacies of printf/scanf are *well* known, so I wouldn't
> > > say that it's any more/less safe. At least with the above functions,
> > > you *know* ahead of time the issues, vs. some random implementation of a
> > > class you don't want to look at.
> >
> > The intricacies of print/scanf may be *well* known, as you
> > say, but *not* to the average C programmer
>
> This I disagree with. Back when I learned C in college (late 80s), it
> wasn't as well known as it is now. However, even back then we discussed
> some of the pitfalls of scanf. With printf/scanf, at least you have
> only *one* set of routines to deal with. With streams, you have a bunch
> of different pitfalls that may vary from class to class. Simple *is*
> better.
Only insofar as it isn't a source of errors. How do you
protect against anyone doing something like
const char *s = "http://this/is/a/strange/url?%23strange";
printf(s);
I've just seen something very similar to this; not involving
printf, but a non-standard string class :-)
//Raymond.
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-chat" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?15494.29430.907768.151847>
