I'm a fairly rookie C++ programmer, but in my limited experience with the language, most standard C++ style guidelines (e.g. Google C++ Style Guidelines) go against what is implemented in the stl and boost libraries.
For example, class names in the C++ standard library and Boost are always lower case, with underscores separating words (e.g. std::vector
, boost::unordered_map
, std::map::const_iterator
), whereas most style guides I've seen for C++ tend towards a CamelCase style (e.g. TcpConnection
or Int32
).
The same applies to methods too. The standard library and Boost use the same style for methods and functions as they do for classes (e.g. std::map<>::get_equal("foo")
), whereas most style guides advocate pascalCase or CamelCase.
If we contrast this with a language like Ruby, where most users will adhere to the conventions used in the core libraries, it seems odd that there'd be such a difference between the standard C++ libraries and everyone else's code.
Does anyone know why this is?
EDIT: Just to clarify, I'm talking simply about the superficial textual style (casing, use of underscores, etc) rather than actual implementation style.
Ultimately, you should learn both. But STL can be learned in isolation, whereas boost won't make much sense until you understand the STL, since that's what Boost is modeled on, and designed to extend. So learn to use the STL as part of learning c++.
After 20 years of active Boost development, it's now recognized as a very powerful C++ library, for each major version many C++ libraries from the community were added. The Boost reviewers have an advanced C++ skills and their contributions guarantee a high quality for many years.
underscores and lowercase was the style perferred by Bjarne Stroustrup in "The C++ Programming Language". If I recall correctly he had made a statement along the lines that underscores in names were to be preferred because it was more readable to an international community where english is not the primary language. I have no idea if his opinion is true or not, but I'm guessing that's the origin.
Here's a link to his FAQ where he discusses this very topic:
http://www.stroustrup.com/bs_faq2.html#Hungarian
Snippet explaining what you were interested in in particular:
I prefer to use underscores to separate words in an identifier (e.g, element_count) rather than alternatives, such as elementCount and ElementCount. Never use names with all capital letter (e.g., BEGIN_TRANSACTION) because that's conventionally reserved for macros. Even if you don't use macros, someone might have littered your header files with them. Use an initial capital letter for types (e.g., Square and Graph). The C++ language and standard library don't use capital letters, so it's int rather than Int and string rather than String. That way, you can recognize the standard types.
There is a good reason beside Bjarne Stroustrup one. When using functors you want them to look like a functions.
But with CamelCase style guides you distinguish Classes from Methods and Functions by using Capitals on the first char of Classes name and LowerCase on the first char of a method.
This is not consistent with c++ algorithm style programming. As there is no reason to distinguish a functor from a function, it's preferable to use c++ and stl coding styles when you want to use functors (and usually you want).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With