No
programming language is perfect. Fortunately, a programming language
does not have to be perfect to be a good tool for building great
systems. In fact, a general purpose programming language can not be
perfect for all of the many tasks to which it is put. What is perfect
for one task is often seriously flawed for another because perfection
in one area implies specialization. Thus, C++ was designed to be a good
tool for building a wide variety of systems and to allow a wide variety
of ideas to be expressed directly.
Not
everything can be expressed directly using the built-in features of a
language. In fact, that isn’t even the ideal. Language features exist
to support a variety of programming styles and techniques.
Consequently, the task of learning a language should focus on mastering
the native and natural styles for that language – not on the
understanding of every little detail of all the language features.
In
practical programming, there is little advantage in knowing the most
obscure language features or for using the largest number of features.
A single language feature in isolation is of little interest. Only in
the context provided by techniques and by other features does the
feature acquire meaning and interest. Thus, when reading the following
chapters, please remember that the real purpose of examining the
details of C++ is to be able to use them in concert to support good
programming style in the context of sound designs.