C++ Language Quick Guide
viptechworld.blogspot.comI just want to point out that Stroustrup's A Tour Of C++ is an excellent quick guide and it does include C++11 features.
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.
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.
doesn't cover enough to actually be productive
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).
Indeed, this is an awful "guide".
EDIT: ... because a) it's extremely outdated, and b) it doesn't even give you the basics.
Another cool resource:
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.
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.
> C++ is a superset of C, and that virtually any legal C program is a legal C++ program.
This is not true. One example, void* pointers are not automatically converted to "narrower" types in C++ as they are in C.
Syntactically, C++ is a superset of C though, right? I can't think of any C syntax that's not valid C++, but I'm not exactly am expert in either
> 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++.
Thanks for the example!
C supports variable-length stack-allocated arrays, while C++ doesn't. So code like
is legal C, but not C++.void f() { int x; scanf("%d", &x); // read from user int numbers[x]; // dynamic }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.
clang++ seems to work as well. I don't have a Windows machine handy to try MSVC, though
> 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++.
>"virtually"
There are differences, but they are few and far between.
That does disqualify C++ as the __superset__ of C doesn't it?
I offer you the infamous phrase "extended superset" made famous in the world of SQL databases :).
(Of course, you're right.)
Ugh, flubbed that: "extended subset". Sorry about that.
C++ is a subclass of C that violates the liskov substitution principle.
This looks more like an exam review study guide than an attempt to teach the language.
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.
Call me nitpicky, but you lost me at `Box Box1;`
Instance names should be lowercase, for God's sake.