Please update the section on storage classes. Auto is no longer a storage class, but a keyword for automatic type deduction. Also, register has recently been deprecated as well, if I remember correctly.
This appears to be a C++03 guide, as it doesn't mention any C++11 features (no range based for). To be fair it is definitely a "quick" guide, and doesn't cover enough to actually be productive in C++ (pointers\memory allocation and references are missing...), but you're right that auto and register are the only things that appear to be explicitly wrong, instead of wrong by omission.
Well probably it would be sufficient to write simple programs. But maybe this guide is just too quick in that it just covers some basic syntax but leaves out a lot of goodies which actual programs use (no containers/algorithms at all, indeed no C++11 and beyond which is imo a shame for any recent C++ guide - there's not even any mentioning of it), doesn't adhere to current best practices (take 'double getVolume(void)': void argument has no place in C++ and should arguably be const, no error checking on stream methods) and seems too lack crucial information (no mention of heder files, no mention of how to get the samples compiled).
I've found the C++ Standard Library 2nd Edition to be an excellent companion to Stroustrup's Tour of C++. It does a good job of preventing you from reinventing wheels that others have already built for you.
> I can't think of any C syntax that's not valid C++,
enum toto { a = 1 };
enum toto b = 1;
Fixing versions of both standards could bring in more examples (like trailing comma in enums and use of the names reserved in C++, by the C code).
Overall, ironically, as typing is stronger in C++ (which I agree is a non-syntactic change), poor C code (using lots of unjustified casts), will require less modifications to be compiled as C++.
> I can't think of any C syntax that's not valid C++,
enum toto { a = 1 };
enum toto b = 1;
Fixing versions of both standards could bring in more examples (like trailing comma in enums and use of the names reserved in C++, by the C code).
Overall, ironically, as typing is stronger in C++ (which I agree is a non-syntactic change), poor C code (using lots of unjustified casts), will require less modifications to be compiled as C++.
> I can't think of any C syntax that's not valid C++,
enum toto { a = 1 };
enum toto b = 1;
Fixing versions of both standards could bring in more examples (like trailing comma in enums and use of the names reserved in C++, by the C code).
Overall, ironically, as typing is stronger in C++ (which I agree is a non-syntactic change), poor C code (using lots of unjustified casts), will require less modifications to be compiled as C++.
C supports variable-length stack-allocated arrays, while C++ doesn't. So code like
void f() {
int x;
scanf("%d", &x); // read from user
int numbers[x]; // dynamic
}
is legal C, but not C++.
Also, the C "restrict" keyword doesn't exist in C++ either. Add in C's looser typing rules regarding conversions, and C and C++ are basically sibling languages at this point. Their common ancestor language being K&R-era C.
> C supports variable-length stack-allocated arrays, while C++ doesn't. So > code like
>
> void f() {
> int x;
> scanf("%d", &x); // read from user
> int numbers[x]; // dynamic
> }
I just pasted this in a file (and added `#include <cstdio>`) and compiled with g++, and it gave no errors or warnings and produced a *.o file, so maybe it does work?
That's because gcc supports it as an extension to C++. It's not an official part of the language, and using it in C++ code is therefore not portable across compilers/platforms.
This is kind of ... crappy. Sorry.
It might have been semi-useful in 2004 or so, but now...woefully outdated and inadequate to get anyone up-to-speed. I'd say it's actually harmful.
This guide is so primitive that it cannot be called useful. It can possibly be harmful, though, to those who don't know the language well and use this guide as a sole source of information.
Does this guide have anything about references? Didn't find anything about that, but maybe I missed it, I think its a pretty important topic to cover. Also didn't see anything about the different types of constructors.
reply