Quote Originally Posted by Dae


But seriously, why?
well, I was only half serious. quick aside before rant: First, like Daved, if you're working with a large existing codebase, don't waste time reformatting it. Second if you're working closely with a library that uses hungarian, it can be convenient to keep a similiar style (MFC/win32 projects are the most common example of this)

So warnings aside, here's my take on hungarian:
In C and especially on embedded platforms, hungarian is useful because a) you want to know the size of your variables to save space and b) C's type checking isn't as strict as it could be. In C++, neither of these are true (C++ is not the language for very restricted memory platforms).

Bad things about hungarian in C++:
- if you change the type of a variable e.g. from (int to short) you need to change it's name and consequently everywhere it's used in the program. And no, I don't accept that you can "Search and Destroy", there's always problems with this.
- C++ is an OO language. how do you prefix objects? should all classes have a corresponding prefix? you're gonna get bloody long prefixes really quick. what about templates?
Code:
std::list<boost::shared_ptr<CDate> > lstSptrDtmyDate; // arrggh!! teh no3s!! it burns my eyes!!
- Prefixing classes with C is redundant. Even microsoft have dropped this convention.
- if an objects type is SO fundamental to what it's doing, it's name should reflect that, not it's prefix

That said, I do use some hungarian style notation:
- m_ for member vars. Note that this indicates scope, not type.
- p for pointers. pointers require a different syntax ('->' instead of '.')

have a read of this article for a more balanced view.
http://ootips.org/hungarian-notation.html