Source: http://codeliberation.org/CLF-slides/Classes_and_Workshops/CPlusPlus/Lecture6.pdf