Penguin
Note: You are viewing an old revision of this page. View the current version.

A ProgrammingLanguage developed by BjarneStroustrup as the successor to C, keeping all of its power and flexibility, adding all new disadvantages.

Advantages

  • More typesafe so the compiler picks up more errors.
  • Generic and typesafe programming via Templates.
  • NameSpaces help avoid symbol name collisions between independent pieces of code.
  • ObjectOrientedProgramming? via 'virtual' functions and (multiple) inheritance.
  • STL, the Standard Template Library.
  • iostreams as a replacement for printf(3).

Complaints

String class

What's the point of a string class if it's not fully compatible char * and is therefor useless for many IO operations? Eg you need a character buffer and can't pass a string object to

  • istream::getline(char *, size_t)
  • read(char*, size_t)
  • get(char*, size_t)
  • ... the list goes on.

Variable interpolation

Interpolating variables into strings is absolutely hideous and easier done by reverting back to C. Compare

// C way char buffer[16?; snprintf(buffer,15,"output-%n.txt", counter);

// vs

// C++ strstream ss; string s; ss << "output-" << counter << ".txt" ; ss >> s;

GarbageCollection (not)

Since BjarneStroustrup liked Simula67 but decided GarbageCollection was "too slow", he designed his own perfect ObjectOriented? language without it. Quite a few people will readily assume he must have been on crack. Besides having to manage memory yourself, you now have to cope with new syntactic sugar that can conceal which part of your code is responsible for what bits on your heap. Great fun - really!

Templates

Your compiler will segfault regularly instead of producing error reports when you stuff up a Template definition. When it does produce an error report, it looks like the (drastically snipped down) one below (in this case it's from the STL).

/usr/include/stlport/stl/_hashtable.h: In method `size_t _STL::hashtable<_STL::pair<const CActionHandler::Keycode,void <snip> /usr/include/stlport/stl/_hashtable.c:347: instantiated from `_STL::hashtable<_STL::pair<const CActionHandler::Keycode,void (CActionHandler::)()>,CActionHandler::Keycode,_STL::hash<CActionHandler::Keycode>,_STL::_Select1st<_STL::pair<const CActionHandler::Keycode,void (CActionHandler::)()> >,_STL::equal_to<CActionHandler::Keycode>,_STL::allocator<_STL::pair<const CActionHandler::Keycode,void (CActionHandler::)()> > >::resize(unsigned int)' /usr/include/stlport/stl/_hashtable.c:169: instantiated from `_STL::hashtable<_STL::pair<const CActionHandler::Keycode,void (CActionHandler::)()>,CActionHandler::Keycode,_STL::hash<CActionHandler::Keycode>,_STL::_Select1st<_STL::pair<const CActionHandler::Keycode,void (CActionHandler::)()> >,_STL::equal_to<CActionHandler::Keycode>,_STL::allocator<_STL::pair<const CActionHandler::Keycode,void (CActionHandler::)()> > >::_M_insert(const _STL::pair<const CActionHandler::Keycode,void (CActionHandler::*)()> &)' /usr/include/stlport/stl/_hash_map.h:188: instantiated from here /usr/include/stlport/stl/_hashtable.h:557: no match for call to `(const _STL::hash<CActionHandler::Keycode>) (const CActionHandler::Keycode &)'

This is perhaps a good reason to stay away from C++ and program in INTERCAL or PASL. Or maybe Java. Or in something like Ocaml, which has parametized types, classes, and modules, covering most if not all the possible uses of C++ Templates in a saner manner.


CategoryProgrammingLanguages