收录日期:2020/05/27 11:09:37 时间:2011-11-23 23:26:53 标签:c++

I started programming in C++. It was my first language, but I have not used it in many years.

What are the new developments in the C++ world? What are the BIG things - technologies, books, frameworks, libraries, etc?

Over the last 7-8 years what are the biggest influences on C++ programming?

Perhaps we could do one influence per post, and that way we can vote on them.

"Modern C++", STL, template metaprogramming and Generic programming.

(And yes, they're one single answer, because they're pretty closely intertwined and together represent a complete paradigm shift in C++ development. While some of them are older than 8-9 years, it's pretty much in the last years that they've really gained traction and really left "C with classes" in the dust.

C++0x

Modern C++ is not only a OOP language. C++0x (the new standard) will include many new additions. It might take some time before it is applied thoroughly in every IDE/compilers but it will add a lot to an already excellent language.

Here is a list of new features of the new standard: C++0x

**Edit: C++0x is the result of the past 8-9 years (thank you jalf).

Qt is also pretty useful, 'pretty', well-documented, portable, and free (now under LGPL).

Developers who actually understand OO rather than C with Classes.

Though the field is still full of C programmers with think they know C++ (but don't they are just C with Classes people).

Although it started in 1998, but it really got going in the last 7-8 years, the boost libraries have added a huge amount of high quality code, which in many ways has helped keep c++ somewhat up to date with the capabilities of more modern languages.

Good books to help prospective C++ programmers learn how to use the language properly. Effective C++ by Scott Meyers was a massive help for me. There are other threads on C++ books.

Scott Meyers wrote about most important C++ people and the most important C++ books. These all had a major influence on how programmers write C++ today.

Commercially available whole-program and profile-guided optimization from various C++ compilers, notably Intel's and Microsoft's. In particular, cross-module inlining makes it easier to write well-factored code that blazes.

  • It’s usually not the first language you learn at college or university anymore. This makes prospective learners appreciative of C++ and eases them into it.

  • The internet, video editing sites, and forums that help programmers of all levels to get help and feedback in a very timely fashion.

To me, besides the already mentioned boost, TMP, MC++D etc., the shift away from teaching C++ as "C plus some extras" towards "C++ is a very different language that's not to be used like C" is very important. That would make Koenig/Moo "Accelerated C++" is a huge influence, even though it's a beginners book and even though it's a beginners book that has (with only 250 pages) much too steep a learning curve.

Stroustrup had been saying things about a better language hidden within C++ and the need to teach it better, but I never really understood what he meant until, after 10 years of C++ programming and experience in TMP, I read the book and was enlighted. :^> It's not that I learned any new technical facts from the book. It just taught me a better way to look at (and teach) C++.

And, yes, I have been programming different since then.

Over the last 7-8 years what are the biggest influences on C++ programming?

Boost was already mentioned and I second that.

The importance of Boost is not just its efficiency and spectrum, but also the promotion of concept-based methods.

Stepanov's famous statement at http://www.stlport.org/resources/StepanovUSA.html

I find OOP philosophically unsound. It claims that everything is an object. Even if it is true it is not very interesting - saying that everything is an object is saying nothing at all.

still holds, the concept of "everything" is still every thing and not "object" - if it was "object", what would "class" then be?

And promoting those concept-based methods is in order, because contrary to common wisdom OOADP is often amazingly concept-less:

OOA is nice for reformulating problems the fancy way but we're not paid for talking fancy but for realizing machine support for workflow concepts users have for their problem domain.

OOD has more value in it if it used as a means to achieve a proper decomposition of large systems and as means to express thinking in patterns (which is quite natural for us), but it is never to be taken as a self purpose. I still recall OO "designs" from ~2000 which were presented with great ado and OO babble and featurism but were not even self-consistent.

The concept behind that method should be finding appropriate and useful abstractions, not finding every possible abstraction. Also in ~2000 I've once seen a (even multi)-inheritance hierarchy of depth 7 from which just one leaf class and its possible descendants would ever be used in the system to be created.

Finally OOP, in the closest sense, naturally tends to create state which is then carefully, and, of course, by more OO, so "More of the Same" (Watzlawick), to be protected against concurrent access. In these situations often the concept needed would be doing something instead ot the OO assembly having something.


C++ coding was 10 years ago, especially due to its "competition" with Java, quite susceptible for the OO odds mentioned, so I think that concept-based methods were a great cure. Boost libs are role models for successfully applying those methods.