title: About the "Reference Arguments" rule in Google C++ Style
body: <p>I'm converting my code to follow the <a href="http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml" rel="nofollow">google C++ style guide</a>. The <a href="http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Reference_Arguments" rel="nofollow">Reference Arguments</a> rule says "All parameters passed by reference must be labeled const" and "input arguments are values or const references while output arguments are pointers".</p>
  
  <p>With respect to the signature <code>void MyTable::LoadTable(ifstream &amp;fin)</code>, how can I label the parameter <code>fin</code> <code>const</code> given <code>LoadTable</code> invokes some non-const function of <code>fin</code>, e.g. <code>fin.seekg</code>? I think <code>fin</code> should be regarded as an input/output parameter thus it's a little bit special. What will googlers do in this situation?</p>
  
  <hr>
  
  <p>UPDATE: I knew there are lots of criticisms about the google style guide. I just wondered how googlers tackle it, and maybe I found an answer: there is another rule <a href="http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Streams" rel="nofollow">Streams</a> reading "Use streams only for logging". Maybe they just don't use streams in this situation.</p>