Also, constructors which take a single argument (or have default arguments such that they can take a single argument) should be marked ```explicit``` unless you really want to implicitly allow a std::string to be converted to a TfIdfWeight by the compiler.  If you're not familiar with explicit, there's a good write up here:

http://stackoverflow.com/questions/121162/what-does-the-explicit-keyword-in-c-mean