Home | History | Annotate | Download | only in google-styleguide
      1 <!DOCTYPE html>
      2 <html>
      3 <head>
      4 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      5 <title>Google C++ Style Guide</title>
      6 <link rel="stylesheet" type="text/css" href="include/styleguide.css">
      7 <script language="javascript" src="include/styleguide.js"></script>
      8 <link rel="shortcut icon" type="image/x-icon" href="https://www.google.com/favicon.ico" />
      9 </head>
     10 <body onload="initStyleGuide();">
     11 <div id="content">
     12 <h1>Google C++ Style Guide</h1>
     13 <div class="horizontal_toc" id="tocDiv"></div>
     14 
     15 <div class="main_body">
     16 
     17 <h2 class="ignoreLink" id="Background">Background</h2>
     18 
     19 <p>C++ is one of the main development languages  used by
     20 many of Google's open-source projects. As every C++
     21 programmer knows, the language has many powerful features, but
     22 this power brings with it complexity, which in turn can make
     23 code more bug-prone and harder to read and maintain.</p>
     24 
     25 <p>The goal of this guide is to manage this complexity by
     26 describing in detail the dos and don'ts of writing C++ code.
     27 These rules exist to
     28 keep  the code base manageable while still allowing
     29 coders to use C++ language features productively.</p>
     30 
     31 <p><em>Style</em>, also known as readability, is what we call
     32 the conventions that govern our C++ code. The term Style is a
     33 bit of a misnomer, since these conventions cover far more than
     34 just source file formatting.</p>
     35 
     36 <p>
     37 Most open-source projects developed by
     38 Google conform to the requirements in this guide.
     39 </p>
     40 
     41 
     42 
     43 
     44 
     45 <p>Note that this guide is not a C++ tutorial: we assume that
     46 the reader is familiar with the language. </p>
     47 
     48 <h3 id="Goals">Goals of the Style Guide</h3>
     49 <div class="stylebody">
     50 <p>Why do we have this document?</p>
     51 
     52 <p>There are a few core goals that we believe this guide should
     53 serve. These are the fundamental <b>why</b>s that
     54 underlie all of the individual rules. By bringing these ideas to
     55 the fore, we hope to ground discussions and make it clearer to our
     56 broader community why the rules are in place and why particular
     57 decisions have been made. If you understand what goals each rule is
     58 serving, it should be clearer to everyone when a rule may be waived
     59 (some can be), and what sort of argument or alternative would be
     60 necessary to change a rule in the guide.</p>
     61 
     62 <p>The goals of the style guide as we currently see them are as follows:</p>
     63 <dl>
     64 <dt>Style rules should pull their weight</dt>
     65 <dd>The benefit of a style rule
     66 must be large enough to justify asking all of our engineers to
     67 remember it. The benefit is measured relative to the codebase we would
     68 get without the rule, so a rule against a very harmful practice may
     69 still have a small benefit if people are unlikely to do it
     70 anyway. This principle mostly explains the rules we don&#8217;t have, rather
     71 than the rules we do: for example, <code>goto</code> contravenes many
     72 of the following principles, but is already vanishingly rare, so the Style
     73 Guide doesn&#8217;t discuss it.</dd>
     74 
     75 <dt>Optimize for the reader, not the writer</dt>
     76 <dd>Our codebase (and most individual components submitted to it) is
     77 expected to continue for quite some time. As a result, more time will
     78 be spent reading most of our code than writing it. We explicitly
     79 choose to optimize for the experience of our average software engineer
     80 reading, maintaining, and debugging code in our codebase rather than
     81 ease when writing said code.  "Leave a trace for the reader" is a
     82 particularly common sub-point of this principle: When something
     83 surprising or unusual is happening in a snippet of code (for example,
     84 transfer of pointer ownership), leaving textual hints for the reader
     85 at the point of use is valuable (<code>std::unique_ptr</code>
     86 demonstrates the ownership transfer unambiguously at the call
     87 site). </dd>
     88 
     89 <dt>Be consistent with existing code</dt>
     90 <dd>Using one style consistently through our codebase lets us focus on
     91 other (more important) issues. Consistency also allows for
     92 automation: tools that format your code or adjust
     93 your <code>#include</code>s only work properly when your code is
     94 consistent with the expectations of the tooling. In many cases, rules
     95 that are attributed to "Be Consistent" boil down to "Just pick one and
     96 stop worrying about it"; the potential value of allowing flexibility
     97 on these points is outweighed by the cost of having people argue over
     98 them. </dd>
     99 
    100 <dt>Be consistent with the broader C++ community when appropriate</dt>
    101 <dd>Consistency with the way other organizations use C++ has value for
    102 the same reasons as consistency within our code base. If a feature in
    103 the C++ standard solves a problem, or if some idiom is widely known
    104 and accepted, that's an argument for using it. However, sometimes
    105 standard features and idioms are flawed, or were just designed without
    106 our codebase's needs in mind. In those cases (as described below) it's
    107 appropriate to constrain or ban standard features.  In some cases we
    108 prefer a homegrown or third-party library over a library defined in
    109 the C++ Standard, either out of perceived superiority or insufficient
    110 value to transition the codebase to the standard interface.</dd>
    111 
    112 <dt>Avoid surprising or dangerous constructs</dt>
    113 <dd>C++ has features that are more surprising or dangerous than one
    114 might think at a glance. Some style guide restrictions are in place to
    115 prevent falling into these pitfalls. There is a high bar for style
    116 guide waivers on such restrictions, because waiving such rules often
    117 directly risks compromising program correctness.
    118 </dd>
    119 
    120 <dt>Avoid constructs that our average C++ programmer would find tricky
    121 or hard to maintain</dt>
    122 <dd>C++ has features that may not be generally appropriate because of
    123 the complexity they introduce to the code. In widely used
    124 code, it may be more acceptable to use
    125 trickier language constructs, because any benefits of more complex
    126 implementation are multiplied widely by usage, and the cost in understanding
    127 the complexity does not need to be paid again when working with new
    128 portions of the codebase. When in doubt, waivers to rules of this type
    129 can be sought by asking 
    130 your project leads. This is specifically
    131 important for our codebase because code ownership and team membership
    132 changes over time: even if everyone that works with some piece of code
    133 currently understands it, such understanding is not guaranteed to hold a
    134 few years from now.</dd>
    135 
    136 <dt>Be mindful of our scale</dt>
    137 <dd>With a codebase of 100+ million lines and thousands of engineers,
    138 some mistakes and simplifications for one engineer can become costly
    139 for many. For instance it's particularly important to
    140 avoid polluting the global namespace: name collisions across a
    141 codebase of hundreds of millions of lines are difficult to work with
    142 and hard to avoid if everyone puts things into the global
    143 namespace.</dd>
    144 
    145 <dt>Concede to optimization when necessary</dt>
    146 <dd>Performance optimizations can sometimes be necessary and
    147 appropriate, even when they conflict with the other principles of this
    148 document.</dd>
    149 </dl>
    150 
    151 <p>The intent of this document is to provide maximal guidance with
    152 reasonable restriction. As always, common sense and good taste should
    153 prevail. By this we specifically refer to the established conventions
    154 of the entire Google C++ community, not just your personal preferences
    155 or those of your team. Be skeptical about and reluctant to use
    156 clever or unusual constructs: the absence of a prohibition is not the
    157 same as a license to proceed.  Use your judgment, and if you are
    158 unsure, please don't hesitate to ask your project leads to get additional
    159 input.</p>
    160 
    161 </div>
    162 
    163  
    164 
    165 <h2 id="Header_Files">Header Files</h2>
    166 
    167 <p>In general, every <code>.cc</code> file should have an
    168 associated <code>.h</code> file. There are some common
    169 exceptions, such as  unittests and
    170 small <code>.cc</code> files containing just a
    171 <code>main()</code> function.</p>
    172 
    173 <p>Correct use of header files can make a huge difference to
    174 the readability, size and performance of your code.</p>
    175 
    176 <p>The following rules will guide you through the various
    177 pitfalls of using header files.</p>
    178 
    179 <a id="The_-inl.h_Files"></a>
    180 <h3 id="Self_contained_Headers">Self-contained Headers</h3>
    181 
    182 <div class="summary">
    183 <p>Header files should be self-contained (compile on their own) and
    184 end in <code>.h</code>.  Non-header files that are meant for inclusion
    185 should end in <code>.inc</code> and be used sparingly.</p>
    186 </div> 
    187 
    188 <div class="stylebody">
    189 <p>All header files should be self-contained. Users and refactoring
    190 tools should not have to adhere to special conditions to include the
    191 header. Specifically, a header should
    192 have <a href="#The__define_Guard">header guards</a> and include all
    193 other headers it needs.</p>
    194 
    195 <p>Prefer placing the definitions for template and inline functions in
    196 the same file as their declarations.  The definitions of these
    197 constructs must be included into every <code>.cc</code> file that uses
    198 them, or the program may fail to link in some build configurations.  If
    199 declarations and definitions are in different files, including the
    200 former should transitively include the latter.  Do not move these
    201 definitions to separately included header files (<code>-inl.h</code>);
    202 this practice was common in the past, but is no longer allowed.</p>
    203 
    204 <p>As an exception, a template that is explicitly instantiated for
    205 all relevant sets of template arguments, or that is a private
    206 implementation detail of a class, is allowed to be defined in the one
    207 and only <code>.cc</code> file that instantiates the template.</p>
    208 
    209 <p>There are rare cases where a file designed to be included is not
    210 self-contained.  These are typically intended to be included at unusual
    211 locations, such as the middle of another file.  They might not
    212 use <a href="#The__define_Guard">header guards</a>, and might not include
    213 their prerequisites.  Name such files with the <code>.inc</code>
    214 extension.  Use sparingly, and prefer self-contained headers when
    215 possible.</p>
    216 
    217 </div> 
    218 
    219 <h3 id="The__define_Guard">The #define Guard</h3>
    220 
    221 <div class="summary">
    222 <p>All header files should have <code>#define</code> guards to
    223 prevent multiple inclusion. The format of the symbol name
    224 should be
    225 <code><i>&lt;PROJECT&gt;</i>_<i>&lt;PATH&gt;</i>_<i>&lt;FILE&gt;</i>_H_</code>.</p>
    226 </div> 
    227 
    228 <div class="stylebody">
    229 
    230 
    231 
    232 <p>To guarantee uniqueness, they should
    233 be based on the full path in a project's source tree. For
    234 example, the file <code>foo/src/bar/baz.h</code> in
    235 project <code>foo</code> should have the following
    236 guard:</p>
    237 
    238 <pre>#ifndef FOO_BAR_BAZ_H_
    239 #define FOO_BAR_BAZ_H_
    240 
    241 ...
    242 
    243 #endif  // FOO_BAR_BAZ_H_
    244 </pre>
    245 
    246 
    247 
    248 
    249 </div> 
    250 
    251 <h3 id="Forward_Declarations">Forward Declarations</h3>
    252 
    253 <div class="summary">
    254   <p>Avoid using forward declarations where possible.
    255   Just <code>#include</code> the headers you need.</p>
    256 </div>
    257 
    258 <div class="stylebody">
    259 
    260 <div class="definition">
    261 <p>A "forward declaration" is a declaration of a class,
    262 function, or template without an associated definition.</p>
    263 </div>
    264 
    265 <div class="pros">
    266 <ul>
    267   <li>Forward declarations can save compile time, as
    268   <code>#include</code>s force the compiler to open
    269   more files and process more input.</li>
    270 
    271   <li>Forward declarations can save on unnecessary
    272   recompilation. <code>#include</code>s can force
    273   your code to be recompiled more often, due to unrelated
    274   changes in the header.</li>
    275 </ul>
    276 </div>
    277 
    278 <div class="cons">
    279 <ul>
    280   <li>Forward declarations can hide a dependency, allowing
    281   user code to skip necessary recompilation when headers
    282   change.</li>
    283 
    284   <li>A forward declaration may be broken by subsequent
    285   changes to the library. Forward declarations of functions
    286   and templates can prevent the header owners from making
    287   otherwise-compatible changes to their APIs, such as
    288   widening a parameter type, adding a template parameter
    289   with a default value, or migrating to a new namespace.</li>
    290 
    291   <li>Forward declaring symbols from namespace
    292   <code>std::</code> yields undefined behavior.</li>
    293 
    294   <li>It can be difficult to determine whether a forward
    295   declaration or a full <code>#include</code> is needed.
    296   Replacing an <code>#include</code> with a forward
    297   declaration can silently change the meaning of
    298   code:
    299       <pre>      // b.h:
    300       struct B {};
    301       struct D : B {};
    302 
    303       // good_user.cc:
    304       #include "b.h"
    305       void f(B*);
    306       void f(void*);
    307       void test(D* x) { f(x); }  // calls f(B*)
    308       </pre>
    309   If the <code>#include</code> was replaced with forward
    310   decls for <code>B</code> and <code>D</code>,
    311   <code>test()</code> would call <code>f(void*)</code>.
    312   </li>
    313 
    314   <li>Forward declaring multiple symbols from a header
    315   can be more verbose than simply
    316   <code>#include</code>ing the header.</li>
    317 
    318   <li>Structuring code to enable forward declarations
    319   (e.g. using pointer members instead of object members)
    320   can make the code slower and more complex.</li>
    321 
    322   
    323 </ul>
    324 </div>
    325 
    326 <div class="decision">
    327 <ul>
    328   <li>Try to avoid forward declarations of entities
    329   defined in another project.</li>
    330 
    331   <li>When using a function declared in a header file,
    332   always <code>#include</code> that header.</li>
    333 
    334   <li>When using a class template, prefer to
    335   <code>#include</code> its header file.</li>
    336 </ul>
    337 
    338 <p>Please see <a href="#Names_and_Order_of_Includes">Names and Order
    339 of Includes</a> for rules about when to #include a header.</p>
    340 </div>
    341 
    342 </div> 
    343 
    344 <h3 id="Inline_Functions">Inline Functions</h3>
    345 
    346 <div class="summary">
    347 <p>Define functions inline only when they are small, say, 10
    348 lines or fewer.</p>
    349 </div>
    350 
    351 <div class="stylebody">
    352 
    353 <div class="definition">
    354 <p>You can declare functions in a way that allows the compiler to expand
    355 them inline rather than calling them through the usual
    356 function call mechanism.</p>
    357 </div>
    358 
    359 <div class="pros">
    360 <p>Inlining a function can generate more efficient object
    361 code, as long as the inlined function is small. Feel free
    362 to inline accessors and mutators, and other short,
    363 performance-critical functions.</p>
    364 </div>
    365 
    366 <div class="cons">
    367 <p>Overuse of inlining can actually make programs slower.
    368 Depending on a function's size, inlining it can cause the
    369 code size to increase or decrease. Inlining a very small
    370 accessor function will usually decrease code size while
    371 inlining a very large function can dramatically increase
    372 code size. On modern processors smaller code usually runs
    373 faster due to better use of the instruction cache.</p>
    374 </div>
    375 
    376 <div class="decision">
    377 <p>A decent rule of thumb is to not inline a function if
    378 it is more than 10 lines long. Beware of destructors,
    379 which are often longer than they appear because of
    380 implicit member- and base-destructor calls!</p>
    381 
    382 <p>Another useful rule of thumb: it's typically not cost
    383 effective to inline functions with loops or switch
    384 statements (unless, in the common case, the loop or
    385 switch statement is never executed).</p>
    386 
    387 <p>It is important to know that functions are not always
    388 inlined even if they are declared as such; for example,
    389 virtual and recursive functions are not normally inlined.
    390 Usually recursive functions should not be inline. The
    391 main reason for making a virtual function inline is to
    392 place its definition in the class, either for convenience
    393 or to document its behavior, e.g., for accessors and
    394 mutators.</p>
    395 </div> 
    396 
    397 </div> 
    398 
    399 <h3 id="Names_and_Order_of_Includes">Names and Order of Includes</h3>
    400 
    401 <div class="summary">
    402 <p>Use standard order for readability and to avoid hidden
    403 dependencies: Related header, C library, C++ library,  other libraries'
    404 <code>.h</code>, your project's <code>.h</code>.</p>
    405 </div>
    406 
    407 <div class="stylebody">
    408 <p>
    409 All of a project's header files should be
    410 listed as descendants of the project's source
    411 directory without use of UNIX directory shortcuts
    412 <code>.</code> (the current directory) or <code>..</code>
    413 (the parent directory). For example,
    414 
    415 <code>google-awesome-project/src/base/logging.h</code>
    416 should be included as:</p>
    417 
    418 <pre>#include "base/logging.h"
    419 </pre>
    420 
    421 <p>In <code><var>dir/foo</var>.cc</code> or
    422 <code><var>dir/foo_test</var>.cc</code>, whose main
    423 purpose is to implement or test the stuff in
    424 <code><var>dir2/foo2</var>.h</code>, order your includes
    425 as follows:</p>
    426 
    427 <ol>
    428   <li><code><var>dir2/foo2</var>.h</code>.</li>
    429 
    430   <li>C system files.</li>
    431 
    432   <li>C++ system files.</li>
    433 
    434   <li>Other libraries' <code>.h</code>
    435   files.</li>
    436 
    437   <li>
    438   Your project's <code>.h</code>
    439   files.</li>
    440 </ol>
    441 
    442 <p>With the preferred ordering, if
    443 <code><var>dir2/foo2</var>.h</code> omits any necessary
    444 includes, the build of <code><var>dir/foo</var>.cc</code>
    445 or <code><var>dir/foo</var>_test.cc</code> will break.
    446 Thus, this rule ensures that build breaks show up first
    447 for the people working on these files, not for innocent
    448 people in other packages.</p>
    449 
    450 <p><code><var>dir/foo</var>.cc</code> and
    451 <code><var>dir2/foo2</var>.h</code> are usually in the same
    452 directory (e.g. <code>base/basictypes_test.cc</code> and
    453 <code>base/basictypes.h</code>), but may sometimes be in different
    454 directories too.</p>
    455 
    456 
    457 
    458 <p>Within each section the includes should be ordered
    459 alphabetically. Note that older code might not conform to
    460 this rule and should be fixed when convenient.</p>
    461 
    462 <p>You should include all the headers that define the symbols you rely
    463 upon, except in the unusual case of <a href="#Forward_Declarations">forward
    464 declaration</a>. If you rely on symbols from <code>bar.h</code>,
    465 don't count on the fact that you included <code>foo.h</code> which
    466 (currently) includes <code>bar.h</code>: include <code>bar.h</code>
    467 yourself, unless <code>foo.h</code> explicitly demonstrates its intent
    468 to provide you the symbols of <code>bar.h</code>.  However, any
    469 includes present in the related header do not need to be included
    470 again in the related <code>cc</code> (i.e., <code>foo.cc</code> can
    471 rely on <code>foo.h</code>'s includes).</p>
    472 
    473 <p>For example, the includes in
    474 
    475 <code>google-awesome-project/src/foo/internal/fooserver.cc</code>
    476 might look like this:</p>
    477 
    478 
    479 <pre>#include "foo/server/fooserver.h"
    480 
    481 #include &lt;sys/types.h&gt;
    482 #include &lt;unistd.h&gt;
    483 
    484 #include &lt;hash_map&gt;
    485 #include &lt;vector&gt;
    486 
    487 #include "base/basictypes.h"
    488 #include "base/commandlineflags.h"
    489 #include "foo/server/bar.h"
    490 </pre>
    491 
    492 <p class="exception">Sometimes, system-specific code needs
    493 conditional includes. Such code can put conditional
    494 includes after other includes. Of course, keep your
    495 system-specific code small and localized. Example:</p>
    496 
    497 <pre>#include "foo/public/fooserver.h"
    498 
    499 #include "base/port.h"  // For LANG_CXX11.
    500 
    501 #ifdef LANG_CXX11
    502 #include &lt;initializer_list&gt;
    503 #endif  // LANG_CXX11
    504 </pre>
    505 
    506 </div> 
    507 
    508 <h2 id="Scoping">Scoping</h2>
    509 
    510 <h3 id="Namespaces">Namespaces</h3>
    511 
    512 <div class="summary">
    513 <p>With few exceptions, place code in a namespace. Namespaces
    514 should have unique names based on the project name, and possibly
    515 its path. Do not use <i>using-directives</i> (e.g.
    516 <code>using namespace foo</code>). Do not use
    517 inline namespaces. For unnamed namespaces, see
    518 <a href="#Unnamed_Namespaces_and_Static_Variables">Unnamed Namespaces and
    519 Static Variables</a>.
    520 </p></div>
    521 
    522 <div class="stylebody">
    523 
    524 <div class="definition">
    525 <p>Namespaces subdivide the global scope
    526 into distinct, named scopes, and so are useful for preventing
    527 name collisions in the global scope.</p>
    528 </div>
    529 
    530 <div class="pros">
    531 
    532 <p>Namespaces provide a method for preventing name conflicts
    533 in large programs while allowing most code to use reasonably
    534 short names.</p>
    535 
    536 <p>For example, if two different projects have a class
    537 <code>Foo</code> in the global scope, these symbols may
    538 collide at compile time or at runtime. If each project
    539 places their code in a namespace, <code>project1::Foo</code>
    540 and <code>project2::Foo</code> are now distinct symbols that
    541 do not collide, and code within each project's namespace
    542 can continue to refer to <code>Foo</code> without the prefix.</p>
    543 
    544 <p>Inline namespaces automatically place their names in
    545 the enclosing scope. Consider the following snippet, for
    546 example:</p>
    547 
    548 <pre>namespace X {
    549 inline namespace Y {
    550   void foo();
    551 }  // namespace Y
    552 }  // namespace X
    553 </pre>
    554 
    555 <p>The expressions <code>X::Y::foo()</code> and
    556 <code>X::foo()</code> are interchangeable. Inline
    557 namespaces are primarily intended for ABI compatibility
    558 across versions.</p>
    559 </div>
    560 
    561 <div class="cons">
    562 
    563 <p>Namespaces can be confusing, because they complicate
    564 the mechanics of figuring out what definition a name refers
    565 to.</p>
    566 
    567 <p>Inline namespaces, in particular, can be confusing
    568 because names aren't actually restricted to the namespace
    569 where they are declared. They are only useful as part of
    570 some larger versioning policy.</p>
    571 
    572 <p>In some contexts, it's necessary to repeatedly refer to
    573 symbols by their fully-qualified names. For deeply-nested
    574 namespaces, this can add a lot of clutter.</p>
    575 </div>
    576 
    577 <div class="decision">
    578 
    579 <p>Namespaces should be used as follows:</p>
    580 
    581 <ul>
    582   <li>Follow the rules on <a href="#Namespace_Names">Namespace Names</a>.
    583   </li><li>Terminate namespaces with comments as shown in the given examples.
    584   </li><li>
    585 
    586   <p>Namespaces wrap the entire source file after
    587   includes,  
    588   <a href="https://gflags.github.io/gflags/">
    589   gflags</a> definitions/declarations
    590   and forward declarations of classes from other namespaces.</p>
    591 
    592 <pre>// In the .h file
    593 namespace mynamespace {
    594 
    595 // All declarations are within the namespace scope.
    596 // Notice the lack of indentation.
    597 class MyClass {
    598  public:
    599   ...
    600   void Foo();
    601 };
    602 
    603 }  // namespace mynamespace
    604 </pre>
    605 
    606 <pre>// In the .cc file
    607 namespace mynamespace {
    608 
    609 // Definition of functions is within scope of the namespace.
    610 void MyClass::Foo() {
    611   ...
    612 }
    613 
    614 }  // namespace mynamespace
    615 </pre>
    616 
    617   <p>More complex <code>.cc</code> files might have additional details,
    618   like flags or using-declarations.</p>
    619 
    620 <pre>#include "a.h"
    621 
    622 DEFINE_FLAG(bool, someflag, false, "dummy flag");
    623 
    624 namespace a {
    625 
    626 using ::foo::bar;
    627 
    628 ...code for a...         // Code goes against the left margin.
    629 
    630 }  // namespace a
    631 </pre>
    632   </li>
    633 
    634   
    635 
    636   <li>Do not declare anything in namespace
    637   <code>std</code>, including forward declarations of
    638   standard library classes. Declaring entities in
    639   namespace <code>std</code> is undefined behavior, i.e.,
    640   not portable. To declare entities from the standard
    641   library, include the appropriate header file.</li>
    642 
    643   <li><p>You may not use a <i>using-directive</i>
    644   to make all names from a namespace available.</p>
    645 
    646 <pre class="badcode">// Forbidden -- This pollutes the namespace.
    647 using namespace foo;
    648 </pre>
    649   </li>
    650 
    651   <li><p>Do not use <i>Namespace aliases</i> at namespace scope
    652   in header files except in explicitly marked
    653   internal-only namespaces, because anything imported into a namespace
    654   in a header file becomes part of the public
    655   API exported by that file.</p>
    656 
    657 <pre>// Shorten access to some commonly used names in .cc files.
    658 namespace baz = ::foo::bar::baz;
    659 </pre>
    660 
    661 <pre>// Shorten access to some commonly used names (in a .h file).
    662 namespace librarian {
    663 namespace impl {  // Internal, not part of the API.
    664 namespace sidetable = ::pipeline_diagnostics::sidetable;
    665 }  // namespace impl
    666 
    667 inline void my_inline_function() {
    668   // namespace alias local to a function (or method).
    669   namespace baz = ::foo::bar::baz;
    670   ...
    671 }
    672 }  // namespace librarian
    673 </pre>
    674 
    675   </li><li>Do not use inline namespaces.</li>
    676 </ul>
    677 </div>
    678 </div>
    679 
    680 <h3 id="Unnamed_Namespaces_and_Static_Variables">Unnamed Namespaces and Static
    681 Variables</h3>
    682 
    683 <div class="summary">
    684 <p>When definitions in a <code>.cc</code> file do not need to be
    685 referenced outside that file, place them in an unnamed
    686 namespace or declare them <code>static</code>. Do not use either
    687 of these constructs in <code>.h</code> files.
    688 </p></div>
    689 
    690 <div class="stylebody">
    691 
    692 <div class="definition">
    693 <p>All declarations can be given internal linkage by placing them in
    694 unnamed namespaces, and functions and variables can be given internal linkage by
    695 declaring them <code>static</code>. This means that anything you're declaring
    696 can't be accessed from another file. If a different file declares something
    697 with the same name, then the two entities are completely independent.</p>
    698 </div>
    699 
    700 <div class="decision">
    701 
    702 <p>Use of internal linkage in <code>.cc</code> files is encouraged
    703 for all code that does not need to be referenced elsewhere.
    704 Do not use internal linkage in <code>.h</code> files.</p>
    705 
    706 <p>Format unnamed namespaces like named namespaces. In the
    707   terminating comment, leave the namespace name empty:</p>
    708 
    709 <pre>namespace {
    710 ...
    711 }  // namespace
    712 </pre>
    713 </div>
    714 </div>
    715 
    716 <h3 id="Nonmember,_Static_Member,_and_Global_Functions">Nonmember, Static Member, and Global Functions</h3>
    717 
    718 <div class="summary">
    719 <p>Prefer placing nonmember functions in a namespace; use completely global
    720 functions rarely. Prefer grouping functions with a namespace instead of
    721 using a class as if it were a namespace. Static methods of a class should
    722 generally be closely related to instances of the class or the class's static
    723 data.</p>
    724 </div>
    725 
    726  <div class="stylebody">
    727 
    728  <div class="pros">
    729  <p>Nonmember and static member functions can be useful in
    730  some situations. Putting nonmember functions in a
    731  namespace avoids polluting the global namespace.</p>
    732  </div>
    733 
    734 <div class="cons">
    735 <p>Nonmember and static member functions may make more sense
    736 as members of a new class, especially if they access
    737 external resources or have significant dependencies.</p>
    738 </div>
    739 
    740 <div class="decision">
    741 <p>Sometimes it is useful to define a
    742 function not bound to a class instance. Such a function
    743 can be either a static member or a nonmember function.
    744 Nonmember functions should not depend on external
    745 variables, and should nearly always exist in a namespace.
    746 Rather than creating classes only to group static member
    747 functions which do not share static data, use
    748 <a href="#Namespaces">namespaces</a> instead. For a header
    749 <code>myproject/foo_bar.h</code>, for example, write</p>
    750 <pre>namespace myproject {
    751 namespace foo_bar {
    752 void Function1();
    753 void Function2();
    754 }  // namespace foo_bar
    755 }  // namespace myproject
    756 </pre>
    757 <p>instead of</p>
    758 <pre class="badcode">namespace myproject {
    759 class FooBar {
    760  public:
    761   static void Function1();
    762   static void Function2();
    763 };
    764 }  // namespace myproject
    765 </pre>
    766 
    767 <p>If you define a nonmember function and it is only
    768 needed in its <code>.cc</code> file, use
    769 <a href="#Unnamed_Namespaces_and_Static_Variables">internal linkage</a> to limit
    770 its scope.</p>
    771 </div>
    772 
    773 </div> 
    774 
    775 <h3 id="Local_Variables">Local Variables</h3>
    776 
    777 <div class="summary">
    778 <p>Place a function's variables in the narrowest scope
    779 possible, and initialize variables in the declaration.</p>
    780 </div>
    781 
    782 <div class="stylebody">
    783 
    784 <p>C++ allows you to declare variables anywhere in a
    785 function. We encourage you to declare them in as local a
    786 scope as possible, and as close to the first use as
    787 possible. This makes it easier for the reader to find the
    788 declaration and see what type the variable is and what it
    789 was initialized to. In particular, initialization should
    790 be used instead of declaration and assignment, e.g.:</p>
    791 
    792 <pre class="badcode">int i;
    793 i = f();      // Bad -- initialization separate from declaration.
    794 </pre>
    795 
    796 <pre>int j = g();  // Good -- declaration has initialization.
    797 </pre>
    798 
    799 <pre class="badcode">std::vector&lt;int&gt; v;
    800 v.push_back(1);  // Prefer initializing using brace initialization.
    801 v.push_back(2);
    802 </pre>
    803 
    804 <pre>std::vector&lt;int&gt; v = {1, 2};  // Good -- v starts initialized.
    805 </pre>
    806 
    807 <p>Variables needed for <code>if</code>, <code>while</code>
    808 and <code>for</code> statements should normally be declared
    809 within those statements, so that such variables are confined
    810 to those scopes.  E.g.:</p>
    811 
    812 <pre>while (const char* p = strchr(str, '/')) str = p + 1;
    813 </pre>
    814 
    815 <p>There is one caveat: if the variable is an object, its
    816 constructor is invoked every time it enters scope and is
    817 created, and its destructor is invoked every time it goes
    818 out of scope.</p>
    819 
    820 <pre class="badcode">// Inefficient implementation:
    821 for (int i = 0; i &lt; 1000000; ++i) {
    822   Foo f;  // My ctor and dtor get called 1000000 times each.
    823   f.DoSomething(i);
    824 }
    825 </pre>
    826 
    827 <p>It may be more efficient to declare such a variable
    828 used in a loop outside that loop:</p>
    829 
    830 <pre>Foo f;  // My ctor and dtor get called once each.
    831 for (int i = 0; i &lt; 1000000; ++i) {
    832   f.DoSomething(i);
    833 }
    834 </pre>
    835 
    836 </div> 
    837 
    838 <h3 id="Static_and_Global_Variables">Static and Global Variables</h3>
    839 
    840 <div class="summary">
    841   <p>Variables of class type with <a href="http://en.cppreference.com/w/cpp/language/storage_duration#Storage_duration">
    842     static storage duration</a> are forbidden: they cause hard-to-find bugs due
    843   to indeterminate order of construction and destruction. However, such
    844   variables are allowed if they are <code>constexpr</code>: they have no
    845   dynamic initialization or destruction.</p>
    846 </div>
    847 
    848 <div class="stylebody">
    849 
    850 <p>Objects with static storage duration, including global
    851 variables, static variables, static class member
    852 variables, and function static variables, must be Plain
    853 Old Data (POD): only ints, chars, floats, or pointers, or
    854 arrays/structs of POD.</p>
    855 
    856 <p>The order in which class constructors and initializers
    857 for static variables are called is only partially
    858 specified in C++ and can even change from build to build,
    859 which can cause bugs that are difficult to find.
    860 Therefore in addition to banning globals of class type,
    861 we do not allow non-local static variables to be initialized
    862 with the result of a function, unless that function (such
    863 as getenv(), or getpid()) does not itself depend on any
    864 other globals. However, a static POD variable within
    865 function scope may be initialized with the result of a
    866 function, since its initialization order is well-defined
    867 and does not occur until control passes through its
    868 declaration.</p>
    869 
    870 <p>Likewise, global and static variables are destroyed
    871 when the program terminates, regardless of whether the
    872 termination is by returning from <code>main()</code> or
    873 by calling <code>exit()</code>. The order in which
    874 destructors are called is defined to be the reverse of
    875 the order in which the constructors were called. Since
    876 constructor order is indeterminate, so is destructor
    877 order. For example, at program-end time a static variable
    878 might have been destroyed, but code still running
    879 &#8212; perhaps in another thread
    880 &#8212; tries to access it and fails. Or the
    881 destructor for a static <code>string</code> variable
    882 might be run prior to the destructor for another variable
    883 that contains a reference to that string.</p>
    884 
    885 <p>One way to alleviate the destructor problem is to
    886 terminate the program by calling
    887 <code>quick_exit()</code> instead of <code>exit()</code>.
    888 The difference is that <code>quick_exit()</code> does not
    889 invoke destructors and does not invoke any handlers that
    890 were registered by calling <code>atexit()</code>. If you
    891 have a handler that needs to run when a program
    892 terminates via <code>quick_exit()</code> (flushing logs,
    893 for example), you can register it using
    894 <code>at_quick_exit()</code>. (If you have a handler that
    895 needs to run at both <code>exit()</code> and
    896 <code>quick_exit()</code>, you need to register it in
    897 both places.)</p>
    898 
    899 <p>As a result we only allow static variables to contain
    900 POD data. This rule completely disallows
    901 <code>std::vector</code> (use C arrays instead), or
    902 <code>string</code> (use <code>const char []</code>).</p>
    903 
    904 
    905 
    906 <p>If you need a static or global
    907 variable of a class type, consider initializing a pointer
    908 (which will never be freed), from either your main()
    909 function or from pthread_once(). Note that this must be a
    910 raw pointer, not a "smart" pointer, since the smart
    911 pointer's destructor will have the order-of-destructor
    912 issue that we are trying to avoid.</p>
    913 
    914 
    915 
    916 
    917 
    918 </div> 
    919 
    920 <h2 id="Classes">Classes</h2>
    921 
    922 <p>Classes are the fundamental unit of code in C++. Naturally,
    923 we use them extensively. This section lists the main dos and
    924 don'ts you should follow when writing a class.</p>
    925 
    926 <h3 id="Doing_Work_in_Constructors">Doing Work in Constructors</h3>
    927 
    928 <div class="summary">
    929 <p>Avoid virtual method calls in constructors, and avoid
    930 initialization that can fail if you can't signal an error.</p>
    931 </div>
    932 
    933 <div class="stylebody">
    934 
    935 <div class="definition">
    936 <p>It is possible to perform arbitrary initialization in the body
    937 of the constructor.</p>
    938 </div>
    939 
    940 <div class="pros">
    941 <ul>
    942   <li>No need to worry about whether the class has been initialized or
    943   not.</li>
    944 
    945   <li>Objects that are fully initialized by constructor call can
    946   be <code>const</code> and may also be easier to use with standard containers
    947   or algorithms.</li>
    948 </ul>
    949 
    950 </div>
    951 
    952 <div class="cons">
    953 <ul>
    954   <li>If the work calls virtual functions, these calls
    955   will not get dispatched to the subclass
    956   implementations. Future modification to your class can
    957   quietly introduce this problem even if your class is
    958   not currently subclassed, causing much confusion.</li>
    959 
    960   <li>There is no easy way for constructors to signal errors, short of
    961   crashing the program (not always appropriate) or using exceptions
    962   (which are <a href="#Exceptions">forbidden</a>).</li>
    963 
    964   <li>If the work fails, we now have an object whose initialization
    965   code failed, so it may be an unusual state requiring a <code>bool
    966   IsValid()</code> state checking mechanism (or similar) which is easy
    967   to forget to call.</li>
    968 
    969   <li>You cannot take the address of a constructor, so whatever work
    970   is done in the constructor cannot easily be handed off to, for
    971   example, another thread.</li>
    972 </ul>
    973 </div>
    974 
    975 
    976 <div class="decision">
    977 <p>Constructors should never call virtual functions. If appropriate
    978 for your code
    979 ,
    980 terminating the program may be an appropriate error handling
    981 response. Otherwise, consider a factory function
    982 or <code>Init()</code> method. Avoid <code>Init()</code> methods on objects with
    983 no other states that affect which public methods may be called
    984 (semi-constructed objects of this form are particularly hard to work
    985 with correctly).</p>
    986 </div>
    987 
    988 </div> 
    989 
    990 <a id="Explicit_Constructors"></a>
    991 <h3 id="Implicit_Conversions">Implicit Conversions</h3>
    992 
    993 <div class="summary">
    994 <p>Do not define implicit conversions. Use the <code>explicit</code>
    995 keyword for conversion operators and single-argument
    996 constructors.</p>
    997 </div>
    998 
    999 <div class="stylebody">
   1000 
   1001 <div class="definition">
   1002 <p>Implicit conversions allow an
   1003 object of one type (called the <dfn>source type</dfn>) to
   1004 be used where a different type (called the <dfn>destination
   1005 type</dfn>) is expected, such as when passing an
   1006 <code>int</code> argument to a function that takes a
   1007 <code>double</code> parameter.</p>
   1008 
   1009 <p>In addition to the implicit conversions defined by the language,
   1010 users can define their own, by adding appropriate members to the
   1011 class definition of the source or destination type. An implicit
   1012 conversion in the source type is defined by a type conversion operator
   1013 named after the destination type (e.g. <code>operator
   1014 bool()</code>). An implicit conversion in the destination
   1015 type is defined by a constructor that can take the source type as
   1016 its only argument (or only argument with no default value).</p>
   1017 
   1018 <p>The <code>explicit</code> keyword can be applied to a constructor
   1019 or (since C++11) a conversion operator, to ensure that it can only be
   1020 used when the destination type is explicit at the point of use,
   1021 e.g. with a cast. This applies not only to implicit conversions, but to
   1022 C++11's list initialization syntax:</p>
   1023 <pre>class Foo {
   1024   explicit Foo(int x, double y);
   1025   ...
   1026 };
   1027 
   1028 void Func(Foo f);
   1029 </pre>
   1030 <pre class="badcode">Func({42, 3.14});  // Error
   1031 </pre>
   1032 This kind of code isn't technically an implicit conversion, but the
   1033 language treats it as one as far as <code>explicit</code> is concerned.
   1034 </div>
   1035 
   1036 <div class="pros">
   1037 <ul>
   1038 <li>Implicit conversions can make a type more usable and
   1039     expressive by eliminating the need to explicitly name a type
   1040     when it's obvious.</li>
   1041 <li>Implicit conversions can be a simpler alternative to
   1042     overloading.</li>
   1043 <li>List initialization syntax is a concise and expressive
   1044     way of initializing objects.</li>
   1045 </ul>
   1046 </div>
   1047 
   1048 <div class="cons">
   1049 <ul>
   1050 <li>Implicit conversions can hide type-mismatch bugs, where the
   1051     destination type does not match the user's expectation, or
   1052     the user is unaware that any conversion will take place.</li>
   1053 
   1054 <li>Implicit conversions can make code harder to read, particularly
   1055     in the presence of overloading, by making it less obvious what
   1056     code is actually getting called.</li>
   1057 
   1058 <li>Constructors that take a single argument may accidentally
   1059     be usable as implicit type conversions, even if they are not
   1060     intended to do so.</li>
   1061 
   1062 <li>When a single-argument constructor is not marked
   1063     <code>explicit</code>, there's no reliable way to tell whether
   1064     it's intended to define an implicit conversion, or the author
   1065     simply forgot to mark it.</li>
   1066 
   1067 <li>It's not always clear which type should provide the conversion,
   1068     and if they both do, the code becomes ambiguous.</li>
   1069 
   1070 <li>List initialization can suffer from the same problems if
   1071     the destination type is implicit, particularly if the
   1072     list has only a single element.</li>
   1073 </ul>
   1074 </div>
   1075 
   1076 <div class="decision">
   1077 <p>Type conversion operators, and constructors that are
   1078 callable with a single argument, must be marked
   1079 <code>explicit</code> in the class definition. As an
   1080 exception, copy and move constructors should not be
   1081 <code>explicit</code>, since they do not perform type
   1082 conversion. Implicit conversions can sometimes be necessary and
   1083 appropriate for types that are designed to transparently wrap other
   1084 types. In that case, contact 
   1085 your project leads to request
   1086 a waiver of this rule.</p>
   1087 
   1088 <p>Constructors that cannot be called with a single argument
   1089 should usually omit <code>explicit</code>. Constructors that
   1090 take a single <code>std::initializer_list</code> parameter should
   1091 also omit <code>explicit</code>, in order to support copy-initialization
   1092 (e.g. <code>MyType m = {1, 2};</code>).</p>
   1093 </div>
   1094 
   1095 </div> 
   1096 
   1097 <h3 id="Copyable_Movable_Types">Copyable and Movable Types</h3>
   1098 <a id="Copy_Constructors"></a>
   1099 <div class="summary">
   1100 <p>Support copying and/or moving if these operations are clear and meaningful
   1101 for your type. Otherwise, disable the implicitly generated special functions
   1102 that perform copies and moves.
   1103 </p></div>
   1104 
   1105 <div class="stylebody">
   1106 
   1107 <div class="definition">
   1108 <p>A copyable type allows its objects to be initialized or assigned
   1109 from any other object of the same type, without changing the value of the source.
   1110 For user-defined types, the copy behavior is defined by the copy
   1111 constructor and the copy-assignment operator.
   1112 <code>string</code> is an example of a copyable type.</p>
   1113 
   1114 <p>A movable type is one that can be initialized and assigned
   1115 from temporaries (all copyable types are therefore movable).
   1116 <code>std::unique_ptr&lt;int&gt;</code> is an example of a movable but not
   1117 copyable type. For user-defined types, the move behavior is defined by the move
   1118 constructor and the move-assignment operator.</p>
   1119 
   1120 <p>The copy/move constructors can be implicitly invoked by the compiler
   1121 in some situations, e.g. when passing objects by value.</p>
   1122 </div>
   1123 
   1124 <div class="pros">
   1125 <p>Objects of copyable and movable types can be passed and returned by value,
   1126 which makes APIs simpler, safer, and more general. Unlike when passing objects
   1127 by pointer or reference, there's no risk of confusion over ownership,
   1128 lifetime, mutability, and similar issues, and no need to specify them in the
   1129 contract. It also prevents non-local interactions between the client and the
   1130 implementation, which makes them easier to understand, maintain, and optimize by
   1131 the compiler. Further, such objects can be used with generic APIs that
   1132 require pass-by-value, such as most containers, and they allow for additional
   1133 flexibility in e.g., type composition.</p>
   1134 
   1135 <p>Copy/move constructors and assignment operators are usually
   1136 easier to define correctly than alternatives
   1137 like <code>Clone()</code>, <code>CopyFrom()</code> or <code>Swap()</code>,
   1138 because they can be generated by the compiler, either implicitly or
   1139 with <code>= default</code>.  They are concise, and ensure
   1140 that all data members are copied. Copy and move
   1141 constructors are also generally more efficient, because they don't
   1142 require heap allocation or separate initialization and assignment
   1143 steps, and they're eligible for optimizations such as
   1144 
   1145 <a href="http://en.cppreference.com/w/cpp/language/copy_elision">
   1146 copy elision</a>.</p>
   1147 
   1148 <p>Move operations allow the implicit and efficient transfer of
   1149 resources out of rvalue objects. This allows a plainer coding style
   1150 in some cases.</p>
   1151 </div>
   1152 
   1153 <div class="cons">
   1154 <p>Some types do not need to be copyable, and providing copy
   1155 operations for such types can be confusing, nonsensical, or outright
   1156 incorrect. Types representing singleton objects (<code>Registerer</code>),
   1157 objects tied to a specific scope (<code>Cleanup</code>), or closely coupled to
   1158 object identity (<code>Mutex</code>) cannot be copied meaningfully.
   1159 Copy operations for base class types that are to be used
   1160 polymorphically are hazardous, because use of them can lead to
   1161 <a href="https://en.wikipedia.org/wiki/Object_slicing">object slicing</a>.
   1162 Defaulted or carelessly-implemented copy operations can be incorrect, and the
   1163 resulting bugs can be confusing and difficult to diagnose.</p>
   1164 
   1165 <p>Copy constructors are invoked implicitly, which makes the
   1166 invocation easy to miss. This may cause confusion for programmers used to
   1167 languages where pass-by-reference is conventional or mandatory. It may also
   1168 encourage excessive copying, which can cause performance problems.</p>
   1169 </div>
   1170 
   1171 <div class="decision">
   1172 
   1173 <p>Provide the copy and move operations if their meaning is clear to a casual
   1174 user and the copying/moving does not incur unexpected costs. If you define a
   1175 copy or move constructor, define the corresponding assignment operator, and
   1176 vice-versa. If your type is copyable, do not define move operations unless they
   1177 are significantly more efficient than the corresponding copy operations. If your
   1178 type is not copyable, but the correctness of a move is obvious to users of the
   1179 type, you may make the type move-only by defining both of the move operations.
   1180 </p>
   1181 
   1182 <p>If your type provides copy operations, it is recommended that you design
   1183 your class so that the default implementation of those operations is correct.
   1184 Remember to review the correctness of any defaulted operations as you would any
   1185 other code, and to document that your class is copyable and/or cheaply movable
   1186 if that's an API guarantee.</p>
   1187 
   1188 <pre class="badcode">class Foo {
   1189  public:
   1190   Foo(Foo&amp;&amp; other) : field_(other.field) {}
   1191   // Bad, defines only move constructor, but not operator=.
   1192 
   1193  private:
   1194   Field field_;
   1195 };
   1196 </pre>
   1197 
   1198 <p>Due to the risk of slicing, avoid providing an assignment
   1199 operator or public copy/move constructor for a class that's
   1200 intended to be derived from (and avoid deriving from a class
   1201 with such members). If your base class needs to be
   1202 copyable, provide a public virtual <code>Clone()</code>
   1203 method, and a protected copy constructor that derived classes
   1204 can use to implement it.</p>
   1205 
   1206 <p>If you do not want to support copy/move operations on your type,
   1207 explicitly disable them using <code>= delete</code> in
   1208 the <code>public:</code> section:</p>
   1209 
   1210 <pre class="code">// MyClass is neither copyable nor movable.
   1211 MyClass(const MyClass&amp;) = delete;
   1212 MyClass&amp; operator=(const MyClass&amp;) = delete;
   1213 </pre>
   1214 
   1215 <p></p>
   1216 
   1217 </div> 
   1218 </div> 
   1219 
   1220 <h3 id="Structs_vs._Classes">Structs vs. Classes</h3>
   1221 
   1222 <div class="summary">
   1223 <p>Use a <code>struct</code> only for passive objects that
   1224       carry data; everything else is a <code>class</code>.</p>
   1225 </div>
   1226 
   1227 <div class="stylebody">
   1228 
   1229 <p>The <code>struct</code> and <code>class</code>
   1230 keywords behave almost identically in C++. We add our own
   1231 semantic meanings to each keyword, so you should use the
   1232 appropriate keyword for the data-type you're
   1233 defining.</p>
   1234 
   1235 <p><code>structs</code> should be used for passive
   1236 objects that carry data, and may have associated
   1237 constants, but lack any functionality other than
   1238 access/setting the data members. The accessing/setting of
   1239 fields is done by directly accessing the fields rather
   1240 than through method invocations. Methods should not
   1241 provide behavior but should only be used to set up the
   1242 data members, e.g., constructor, destructor,
   1243 <code>Initialize()</code>, <code>Reset()</code>,
   1244 <code>Validate()</code>.</p>
   1245 
   1246 <p>If more functionality is required, a
   1247 <code>class</code> is more appropriate. If in doubt, make
   1248 it a <code>class</code>.</p>
   1249 
   1250 <p>For consistency with STL, you can use
   1251 <code>struct</code> instead of <code>class</code> for
   1252 functors and traits.</p>
   1253 
   1254 <p>Note that member variables in structs and classes have
   1255 <a href="#Variable_Names">different naming rules</a>.</p>
   1256 
   1257 </div> 
   1258 
   1259 <h3 id="Inheritance">Inheritance</h3>
   1260 
   1261 <div class="summary">
   1262 <p>Composition is often more appropriate than inheritance.
   1263 When using inheritance, make it <code>public</code>.</p>
   1264 </div>
   1265 
   1266 <div class="stylebody">
   1267 
   1268 <div class="definition">
   1269 <p> When a sub-class
   1270 inherits from a base class, it includes the definitions
   1271 of all the data and operations that the parent base class
   1272 defines. In practice, inheritance is used in two major
   1273 ways in C++: implementation inheritance, in which actual
   1274 code is inherited by the child, and
   1275 <a href="#Interfaces">interface inheritance</a>, in which
   1276 only method names are inherited.</p>
   1277 </div>
   1278 
   1279 <div class="pros">
   1280 <p>Implementation inheritance reduces code size by re-using
   1281 the base class code as it specializes an existing type.
   1282 Because inheritance is a compile-time declaration, you
   1283 and the compiler can understand the operation and detect
   1284 errors. Interface inheritance can be used to
   1285 programmatically enforce that a class expose a particular
   1286 API. Again, the compiler can detect errors, in this case,
   1287 when a class does not define a necessary method of the
   1288 API.</p>
   1289 </div>
   1290 
   1291 <div class="cons">
   1292 <p>For implementation inheritance, because the code
   1293 implementing a sub-class is spread between the base and
   1294 the sub-class, it can be more difficult to understand an
   1295 implementation. The sub-class cannot override functions
   1296 that are not virtual, so the sub-class cannot change
   1297 implementation. The base class may also define some data
   1298 members, so that specifies physical layout of the base
   1299 class.</p>
   1300 </div>
   1301 
   1302 <div class="decision">
   1303 
   1304 <p>All inheritance should be <code>public</code>. If you
   1305 want to do private inheritance, you should be including
   1306 an instance of the base class as a member instead.</p>
   1307 
   1308 <p>Do not overuse implementation inheritance. Composition
   1309 is often more appropriate. Try to restrict use of
   1310 inheritance to the "is-a" case: <code>Bar</code>
   1311 subclasses <code>Foo</code> if it can reasonably be said
   1312 that <code>Bar</code> "is a kind of"
   1313 <code>Foo</code>.</p>
   1314 
   1315 <p>Make your destructor <code>virtual</code> if
   1316 necessary. If your class has virtual methods, its
   1317 destructor  should be virtual.</p>
   1318 
   1319 <p>Limit the use of <code>protected</code> to those
   1320 member functions that might need to be accessed from
   1321 subclasses. Note that <a href="#Access_Control">data
   1322 members should be private</a>.</p>
   1323 
   1324 <p>Explicitly annotate overrides of virtual functions
   1325 or virtual destructors with an <code>override</code>
   1326 or (less frequently) <code>final</code> specifier.
   1327 Older (pre-C++11) code will use the
   1328 <code>virtual</code> keyword as an inferior
   1329 alternative annotation. For clarity, use exactly one of
   1330 <code>override</code>, <code>final</code>, or
   1331 <code>virtual</code> when declaring an override.
   1332 Rationale: A function or destructor marked
   1333 <code>override</code> or <code>final</code> that is
   1334 not an override of a base class virtual function will
   1335 not compile, and this helps catch common errors. The
   1336 specifiers serve as documentation; if no specifier is
   1337 present, the reader has to check all ancestors of the
   1338 class in question to determine if the function or
   1339 destructor is virtual or not.</p>
   1340 </div>
   1341 
   1342 </div> 
   1343 
   1344 <h3 id="Multiple_Inheritance">Multiple Inheritance</h3>
   1345 
   1346 <div class="summary">
   1347 <p>Only very rarely is multiple implementation inheritance
   1348 actually useful. We allow multiple inheritance only when at
   1349 most one of the base classes has an implementation; all
   1350 other base classes must be <a href="#Interfaces">pure
   1351 interface</a> classes tagged with the
   1352 <code>Interface</code> suffix.</p>
   1353 </div>
   1354 
   1355 <div class="stylebody">
   1356 
   1357 <div class="definition">
   1358 <p>Multiple inheritance allows a sub-class to have more than
   1359 one base class. We distinguish between base classes that are
   1360 <em>pure interfaces</em> and those that have an
   1361 <em>implementation</em>.</p>
   1362 </div>
   1363 
   1364 <div class="pros">
   1365 <p>Multiple implementation inheritance may let you re-use
   1366 even more code than single inheritance (see <a href="#Inheritance">Inheritance</a>).</p>
   1367 </div>
   1368 
   1369 <div class="cons">
   1370 <p>Only very rarely is multiple <em>implementation</em>
   1371 inheritance actually useful. When multiple implementation
   1372 inheritance seems like the solution, you can usually find
   1373 a different, more explicit, and cleaner solution.</p>
   1374 </div>
   1375 
   1376 <div class="decision">
   1377 <p> Multiple inheritance is allowed only when all
   1378 superclasses, with the possible exception of the first one,
   1379 are <a href="#Interfaces">pure interfaces</a>. In order to
   1380 ensure that they remain pure interfaces, they must end with
   1381 the <code>Interface</code> suffix.</p>
   1382 </div>
   1383 
   1384 <div class="note">
   1385 <p>There is an <a href="#Windows_Code">exception</a> to
   1386 this rule on Windows.</p>
   1387 </div>
   1388 
   1389 </div> 
   1390 
   1391 <h3 id="Interfaces">Interfaces</h3>
   1392 
   1393 <div class="summary">
   1394 <p>Classes that satisfy certain conditions are allowed, but
   1395 not required, to end with an <code>Interface</code> suffix.</p>
   1396 </div>
   1397 
   1398 <div class="stylebody">
   1399 
   1400 <div class="definition">
   1401 <p>A class is a pure interface if it meets the following
   1402 requirements:</p>
   1403 
   1404 <ul>
   1405   <li>It has only public pure virtual ("<code>=
   1406   0</code>") methods and static methods (but see below
   1407   for destructor).</li>
   1408 
   1409   <li>It may not have non-static data members.</li>
   1410 
   1411   <li>It need not have any constructors defined. If a
   1412   constructor is provided, it must take no arguments and
   1413   it must be protected.</li>
   1414 
   1415   <li>If it is a subclass, it may only be derived from
   1416   classes that satisfy these conditions and are tagged
   1417   with the <code>Interface</code> suffix.</li>
   1418 </ul>
   1419 
   1420 <p>An interface class can never be directly instantiated
   1421 because of the pure virtual method(s) it declares. To
   1422 make sure all implementations of the interface can be
   1423 destroyed correctly, the interface must also declare a
   1424 virtual destructor (in an exception to the first rule,
   1425 this should not be pure). See Stroustrup, <cite>The C++
   1426 Programming Language</cite>, 3rd edition, section 12.4
   1427 for details.</p>
   1428 </div>
   1429 
   1430 <div class="pros">
   1431 <p>Tagging a class with the <code>Interface</code> suffix
   1432 lets others know that they must not add implemented
   1433 methods or non static data members. This is particularly
   1434 important in the case of <a href="#Multiple_Inheritance">multiple inheritance</a>.
   1435 Additionally, the interface concept is already
   1436 well-understood by Java programmers.</p>
   1437 </div>
   1438 
   1439 <div class="cons">
   1440 <p>The <code>Interface</code> suffix lengthens the class
   1441 name, which can make it harder to read and understand.
   1442 Also, the interface property may be considered an
   1443 implementation detail that shouldn't be exposed to
   1444 clients.</p>
   1445 </div>
   1446 
   1447 <div class="decision">
   1448 <p>A class may end
   1449 with <code>Interface</code> only if it meets the above
   1450 requirements. We do not require the converse, however:
   1451 classes that meet the above requirements are not required
   1452 to end with <code>Interface</code>.</p>
   1453 </div>
   1454 
   1455 </div> 
   1456 
   1457 <h3 id="Operator_Overloading">Operator Overloading</h3>
   1458 
   1459 <div class="summary">
   1460 <p>Overload operators judiciously. Do not create user-defined literals.</p>
   1461 </div>
   1462 
   1463 <div class="stylebody">
   1464 
   1465 <div class="definition">
   1466 <p>C++ permits user code to
   1467 <a href="http://en.cppreference.com/w/cpp/language/operators">declare
   1468 overloaded versions of the built-in operators</a> using the
   1469 <code>operator</code> keyword, so long as one of the parameters
   1470 is a user-defined type. The <code>operator</code> keyword also
   1471 permits user code to define new kinds of literals using
   1472 <code>operator""</code>, and to define type-conversion functions
   1473 such as <code>operator bool()</code>.</p>
   1474 </div>
   1475 
   1476 <div class="pros">
   1477 <p>Operator overloading can make code more concise and
   1478 intuitive by enabling user-defined types to behave the same
   1479 as built-in types. Overloaded operators are the idiomatic names
   1480 for certain operations (e.g. <code>==</code>, <code>&lt;</code>,
   1481 <code>=</code>, and <code>&lt;&lt;</code>), and adhering to
   1482 those conventions can make user-defined types more readable
   1483 and enable them to interoperate with libraries that expect
   1484 those names.</p>
   1485 
   1486 <p>User-defined literals are a very concise notation for
   1487 creating objects of user-defined types.</p>
   1488 </div>
   1489 
   1490 <div class="cons">
   1491 <ul>
   1492   <li>Providing a correct, consistent, and unsurprising
   1493   set of operator overloads requires some care, and failure
   1494   to do so can lead to confusion and bugs.</li>
   1495 
   1496   <li>Overuse of operators can lead to obfuscated code,
   1497   particularly if the overloaded operator's semantics
   1498   don't follow convention.</li>
   1499 
   1500   <li>The hazards of function overloading apply just as
   1501   much to operator overloading, if not more so.</li>
   1502 
   1503   <li>Operator overloads can fool our intuition into
   1504   thinking that expensive operations are cheap, built-in
   1505   operations.</li>
   1506 
   1507   <li>Finding the call sites for overloaded operators may
   1508   require a search tool that's aware of C++ syntax, rather
   1509   than e.g. grep.</li>
   1510 
   1511   <li>If you get the argument type of an overloaded operator
   1512   wrong, you may get a different overload rather than a
   1513   compiler error. For example, <code>foo &lt; bar</code>
   1514   may do one thing, while <code>&amp;foo &lt; &amp;bar</code>
   1515   does something totally different.</li>
   1516 
   1517   <li>Certain operator overloads are inherently hazardous.
   1518   Overloading unary <code>&amp;</code> can cause the same
   1519   code to have different meanings depending on whether
   1520   the overload declaration is visible. Overloads of
   1521   <code>&amp;&amp;</code>, <code>||</code>, and <code>,</code>
   1522   (comma) cannot match the evaluation-order semantics of the
   1523   built-in operators.</li>
   1524 
   1525   <li>Operators are often defined outside the class,
   1526   so there's a risk of different files introducing
   1527   different definitions of the same operator. If both
   1528   definitions are linked into the same binary, this results
   1529   in undefined behavior, which can manifest as subtle
   1530   run-time bugs.</li>
   1531 
   1532   <li>User-defined literals allow the creation of new
   1533   syntactic forms that are unfamiliar even to experienced C++
   1534   programmers.</li>
   1535 </ul>
   1536 </div>
   1537 
   1538 <div class="decision">
   1539 <p>Define overloaded operators only if their meaning is
   1540 obvious, unsurprising, and consistent with the corresponding
   1541 built-in operators. For example, use <code>|</code> as a
   1542 bitwise- or logical-or, not as a shell-style pipe.</p>
   1543 
   1544 <p>Define operators only on your own types. More precisely,
   1545 define them in the same headers, .cc files, and namespaces
   1546 as the types they operate on. That way, the operators are available
   1547 wherever the type is, minimizing the risk of multiple
   1548 definitions. If possible, avoid defining operators as templates,
   1549 because they must satisfy this rule for any possible template
   1550 arguments. If you define an operator, also define
   1551 any related operators that make sense, and make sure they
   1552 are defined consistently. For example, if you overload
   1553 <code>&lt;</code>, overload all the comparison operators,
   1554 and make sure <code>&lt;</code> and <code>&gt;</code> never
   1555 return true for the same arguments.</p>
   1556 
   1557 <p>Prefer to define non-modifying binary operators as
   1558 non-member functions. If a binary operator is defined as a
   1559 class member, implicit conversions will apply to the
   1560 right-hand argument, but not the left-hand one. It will
   1561 confuse your users if <code>a &lt; b</code> compiles but
   1562 <code>b &lt; a</code> doesn't.</p>
   1563 
   1564 <p>Don't go out of your way to avoid defining operator
   1565 overloads. For example, prefer to define <code>==</code>,
   1566 <code>=</code>, and <code>&lt;&lt;</code>, rather than
   1567 <code>Equals()</code>, <code>CopyFrom()</code>, and
   1568 <code>PrintTo()</code>. Conversely, don't define
   1569 operator overloads just because other libraries expect
   1570 them. For example, if your type doesn't have a natural
   1571 ordering, but you want to store it in a <code>std::set</code>,
   1572 use a custom comparator rather than overloading
   1573 <code>&lt;</code>.</p>
   1574 
   1575 <p>Do not overload <code>&amp;&amp;</code>, <code>||</code>,
   1576 <code>,</code> (comma), or unary <code>&amp;</code>. Do not overload
   1577 <code>operator""</code>, i.e. do not introduce user-defined
   1578 literals.</p>
   1579 
   1580 <p>Type conversion operators are covered in the section on
   1581 <a href="#Implicit_Conversions">implicit conversions</a>.
   1582 The <code>=</code> operator is covered in the section on
   1583 <a href="#Copy_Constructors">copy constructors</a>. Overloading
   1584 <code>&lt;&lt;</code> for use with streams is covered in the
   1585 section on <a href="#Streams">streams</a>. See also the rules on
   1586 <a href="#Function_Overloading">function overloading</a>, which
   1587 apply to operator overloading as well.</p>
   1588 </div>
   1589 
   1590 </div> 
   1591 
   1592 <h3 id="Access_Control">Access Control</h3>
   1593 
   1594 <div class="summary">
   1595 <p> Make data members <code>private</code>, unless they are
   1596 <code>static const</code> (and follow the <a href="#Constant_Names">
   1597 naming convention for constants</a>). For technical
   1598 reasons, we allow data members of a test fixture class to
   1599 be <code>protected</code> when using
   1600 
   1601 
   1602 <a href="https://github.com/google/googletest">Google
   1603 Test</a>).</p>
   1604 </div>
   1605 
   1606 <h3 id="Declaration_Order">Declaration Order</h3>
   1607 
   1608 <div class="summary">
   1609 <p>Group similar declarations together, placing public parts
   1610 earlier.</p>
   1611 </div>
   1612 
   1613 <div class="stylebody">
   1614 
   1615 <p>A class definition should usually start with a
   1616 <code>public:</code> section, followed by
   1617 <code>protected:</code>, then <code>private:</code>.  Omit
   1618 sections that would be empty.</p>
   1619 
   1620 <p>Within each section, generally prefer grouping similar
   1621 kinds of declarations together, and generally prefer the
   1622 following order: types (including <code>typedef</code>,
   1623 <code>using</code>, and nested structs and classes),
   1624 constants, factory functions, constructors, assignment
   1625 operators, destructor, all other methods, data members.</p>
   1626 
   1627 <p>Do not put large method definitions inline in the
   1628 class definition. Usually, only trivial or
   1629 performance-critical, and very short, methods may be
   1630 defined inline. See <a href="#Inline_Functions">Inline
   1631 Functions</a> for more details.</p>
   1632 
   1633 </div> 
   1634 
   1635 <h2 id="Functions">Functions</h2>
   1636 
   1637 <h3 id="Function_Parameter_Ordering">Parameter Ordering</h3>
   1638 
   1639 <div class="summary">
   1640 <p>When defining a function, parameter order is: inputs, then
   1641 outputs.</p>
   1642 </div>
   1643 
   1644 <div class="stylebody">
   1645 <p>Parameters to C/C++ functions are either input to the
   1646 function, output from the function, or both. Input
   1647 parameters are usually values or <code>const</code>
   1648 references, while output and input/output parameters will
   1649 be pointers to non-<code>const</code>. When ordering
   1650 function parameters, put all input-only parameters before
   1651 any output parameters. In particular, do not add new
   1652 parameters to the end of the function just because they
   1653 are new; place new input-only parameters before the
   1654 output parameters.</p>
   1655 
   1656 <p>This is not a hard-and-fast rule. Parameters that are
   1657 both input and output (often classes/structs) muddy the
   1658 waters, and, as always, consistency with related
   1659 functions may require you to bend the rule.</p>
   1660 
   1661 </div> 
   1662 
   1663 <h3 id="Write_Short_Functions">Write Short Functions</h3>
   1664 
   1665 <div class="summary">
   1666 <p>Prefer small and focused functions.</p>
   1667 </div>
   1668 
   1669 <div class="stylebody">
   1670 <p>We recognize that long functions are sometimes
   1671 appropriate, so no hard limit is placed on functions
   1672 length. If a function exceeds about 40 lines, think about
   1673 whether it can be broken up without harming the structure
   1674 of the program.</p>
   1675 
   1676 <p>Even if your long function works perfectly now,
   1677 someone modifying it in a few months may add new
   1678 behavior. This could result in bugs that are hard to
   1679 find. Keeping your functions short and simple makes it
   1680 easier for other people to read and modify your code.</p>
   1681 
   1682 <p>You could find long and complicated functions when
   1683 working with 
   1684 some code. Do not be
   1685 intimidated by modifying existing code: if working with
   1686 such a function proves to be difficult, you find that
   1687 errors are hard to debug, or you want to use a piece of
   1688 it in several different contexts, consider breaking up
   1689 the function into smaller and more manageable pieces.</p>
   1690 
   1691 </div> 
   1692 
   1693 <h3 id="Reference_Arguments">Reference Arguments</h3>
   1694 
   1695 <div class="summary">
   1696 <p>All parameters passed by reference must be labeled
   1697 <code>const</code>.</p>
   1698 </div>
   1699 
   1700 <div class="stylebody">
   1701 
   1702 <div class="definition">
   1703 <p>In C, if a
   1704 function needs to modify a variable, the parameter must
   1705 use a pointer, eg <code>int foo(int *pval)</code>. In
   1706 C++, the function can alternatively declare a reference
   1707 parameter: <code>int foo(int &amp;val)</code>.</p>
   1708 </div>
   1709 
   1710 <div class="pros">
   1711 <p>Defining a parameter as reference avoids ugly code like
   1712 <code>(*pval)++</code>. Necessary for some applications
   1713 like copy constructors. Makes it clear, unlike with
   1714 pointers, that a null pointer is not a possible
   1715 value.</p>
   1716 </div>
   1717 
   1718 <div class="cons">
   1719 <p>References can be confusing, as they have value syntax
   1720 but pointer semantics.</p>
   1721 </div>
   1722 
   1723 <div class="decision">
   1724 <p>Within function parameter lists all references must be
   1725 <code>const</code>:</p>
   1726 
   1727 <pre>void Foo(const string &amp;in, string *out);
   1728 </pre>
   1729 
   1730 <p>In fact it is a very strong convention in Google code
   1731 that input arguments are values or <code>const</code>
   1732 references while output arguments are pointers. Input
   1733 parameters may be <code>const</code> pointers, but we
   1734 never allow non-<code>const</code> reference parameters
   1735 except when required by convention, e.g.,
   1736 <code>swap()</code>.</p>
   1737 
   1738 <p>However, there are some instances where using
   1739 <code>const T*</code> is preferable to <code>const
   1740 T&amp;</code> for input parameters. For example:</p>
   1741 
   1742 <ul>
   1743   <li>You want to pass in a null pointer.</li>
   1744 
   1745   <li>The function saves a pointer or reference to the
   1746   input.</li>
   1747 </ul>
   1748 
   1749 <p> Remember that most of the time input
   1750 parameters are going to be specified as <code>const
   1751 T&amp;</code>. Using <code>const T*</code> instead
   1752 communicates to the reader that the input is somehow
   1753 treated differently. So if you choose <code>const
   1754 T*</code> rather than <code>const T&amp;</code>, do so
   1755 for a concrete reason; otherwise it will likely confuse
   1756 readers by making them look for an explanation that
   1757 doesn't exist.</p>
   1758 </div>
   1759 
   1760 </div> 
   1761 
   1762 <h3 id="Function_Overloading">Function Overloading</h3>
   1763 
   1764 <div class="summary">
   1765 <p>Use overloaded functions (including constructors) only if a
   1766 reader looking at a call site can get a good idea of what
   1767 is happening without having to first figure out exactly
   1768 which overload is being called.</p>
   1769 </div>
   1770 
   1771 <div class="stylebody">
   1772 
   1773 <div class="definition">
   1774 <p>You may write a function that takes a <code>const
   1775 string&amp;</code> and overload it with another that
   1776 takes <code>const char*</code>.</p>
   1777 
   1778 <pre>class MyClass {
   1779  public:
   1780   void Analyze(const string &amp;text);
   1781   void Analyze(const char *text, size_t textlen);
   1782 };
   1783 </pre>
   1784 </div>
   1785 
   1786 <div class="pros">
   1787 <p>Overloading can make code more intuitive by allowing an
   1788 identically-named function to take different arguments.
   1789 It may be necessary for templatized code, and it can be
   1790 convenient for Visitors.</p>
   1791 </div>
   1792 
   1793 <div class="cons">
   1794 <p>If a function is overloaded by the argument types alone,
   1795 a reader may have to understand C++'s complex matching
   1796 rules in order to tell what's going on. Also many people
   1797 are confused by the semantics of inheritance if a derived
   1798 class overrides only some of the variants of a
   1799 function.</p>
   1800 </div>
   1801 
   1802 <div class="decision">
   1803 <p>If you want to overload a function, consider qualifying
   1804 the name with some information about the arguments, e.g.,
   1805 <code>AppendString()</code>, <code>AppendInt()</code>
   1806 rather than just <code>Append()</code>. If you are
   1807 overloading a function to support variable number of
   1808 arguments of the same type, consider making it take a
   1809 <code>std::vector</code> so that the user can use an
   1810 <a href="#Braced_Initializer_List">initializer list
   1811 </a> to specify the arguments.</p>
   1812 </div>
   1813 
   1814 </div> 
   1815 
   1816 <h3 id="Default_Arguments">Default Arguments</h3>
   1817 
   1818 <div class="summary">
   1819 <p>Default arguments are allowed on non-virtual functions
   1820 when the default is guaranteed to always have the same
   1821 value. Follow the same restrictions as for <a href="#Function_Overloading">function overloading</a>, and
   1822 prefer overloaded functions if the readability gained with
   1823 default arguments doesn't outweigh the downsides below.</p>
   1824 </div>
   1825 
   1826 <div class="stylebody">
   1827 
   1828 <div class="pros">
   1829 <p>Often you have a function that uses default values, but
   1830 occasionally you want to override the defaults. Default
   1831 parameters allow an easy way to do this without having to
   1832 define many functions for the rare exceptions. Compared
   1833 to overloading the function, default arguments have a
   1834 cleaner syntax, with less boilerplate and a clearer
   1835 distinction between 'required' and 'optional'
   1836 arguments.</p>
   1837 </div>
   1838 
   1839 <div class="cons">
   1840 <p>Defaulted arguments are another way to achieve the
   1841 semantics of overloaded functions, so all the <a href="#Function_Overloading">reasons not to overload
   1842 functions</a> apply.</p>
   1843 
   1844 <p>The defaults for arguments in a virtual function call are
   1845 determined by the static type of the target object, and
   1846 there's no guarantee that all overrides of a given function
   1847 declare the same defaults.</p>
   1848 
   1849 <p>Default parameters are re-evaluated at each call site,
   1850 which can bloat the generated code. Readers may also expect
   1851 the default's value to be fixed at the declaration instead
   1852 of varying at each call.</p>
   1853 
   1854 <p>Function pointers are confusing in the presence of
   1855 default arguments, since the function signature often
   1856 doesn't match the call signature. Adding
   1857 function overloads avoids these problems.</p>
   1858 </div>
   1859 
   1860 <div class="decision">
   1861 <p>Default arguments are banned on virtual functions, where
   1862 they don't work properly, and in cases where the specified
   1863 default might not evaluate to the same value depending on
   1864 when it was evaluated. (For example, don't write <code>void
   1865 f(int n = counter++);</code>.)</p>
   1866 
   1867 <p>In some other cases, default arguments can improve the
   1868 readability of their function declarations enough to
   1869 overcome the downsides above, so they are allowed. When in
   1870 doubt, use overloads.</p>
   1871 </div>
   1872 
   1873 </div> 
   1874 
   1875 <h3 id="trailing_return">Trailing Return Type Syntax</h3>
   1876 <div class="summary">
   1877 <p>Use trailing return types only where using the ordinary syntax (leading
   1878   return types) is impractical or much less readable.</p>
   1879 </div>
   1880 
   1881 <div class="definition">
   1882 <p>C++ allows two different forms of function declarations. In the older
   1883   form, the return type appears before the function name. For example:</p>
   1884 <pre>int foo(int x);
   1885 </pre>
   1886 <p>The new form, introduced in C++11, uses the <code>auto</code>
   1887   keyword before the function name and a trailing return type after
   1888   the argument list. For example, the declaration above could
   1889   equivalently be written:</p>
   1890 <pre>auto foo(int x) -&gt; int;
   1891 </pre>
   1892 <p>The trailing return type is in the function's scope. This doesn't
   1893   make a difference for a simple case like <code>int</code> but it matters
   1894   for more complicated cases, like types declared in class scope or
   1895   types written in terms of the function parameters.</p>
   1896 </div>
   1897 
   1898 <div class="stylebody">
   1899 <div class="pros">
   1900 <p>Trailing return types are the only way to explicitly specify the
   1901   return type of a <a href="#Lambda_expressions">lambda expression</a>.
   1902   In some cases the compiler is able to deduce a lambda's return type,
   1903   but not in all cases. Even when the compiler can deduce it automatically,
   1904   sometimes specifying it explicitly would be clearer for readers.
   1905 </p>
   1906 <p>Sometimes it's easier and more readable to specify a return type
   1907   after the function's parameter list has already appeared. This is
   1908   particularly true when the return type depends on template parameters.
   1909   For example:</p>
   1910   <pre>template &lt;class T, class U&gt; auto add(T t, U u) -&gt; decltype(t + u);</pre>
   1911   versus
   1912   <pre>template &lt;class T, class U&gt; decltype(declval&lt;T&amp;&gt;() + declval&lt;U&amp;&gt;()) add(T t, U u);</pre>
   1913 </div>
   1914 
   1915 <div class="cons">
   1916 <p>Trailing return type syntax is relatively new and it has no
   1917   analogue in C++-like languages like C and Java, so some readers may
   1918   find it unfamiliar.</p>
   1919 <p>Existing code bases have an enormous number of function
   1920   declarations that aren't going to get changed to use the new syntax,
   1921   so the realistic choices are using the old syntax only or using a mixture
   1922   of the two. Using a single version is better for uniformity of style.</p>
   1923 </div>
   1924 
   1925 <div class="decision">
   1926 <p>In most cases, continue to use the older style of function
   1927   declaration where the return type goes before the function name.
   1928   Use the new trailing-return-type form only in cases where it's
   1929   required (such as lambdas) or where, by putting the type after the
   1930   function's parameter list, it allows you to write the type in a much
   1931   more readable way. The latter case should be rare; it's mostly an
   1932   issue in fairly complicated template code, which is
   1933   <a href="#Template_metaprogramming">discouraged in most cases</a>.</p>
   1934 
   1935 </div> 
   1936 </div> 
   1937 
   1938 <h2 id="Google-Specific_Magic">Google-Specific Magic</h2>
   1939 
   1940 
   1941 
   1942 <p>There are various tricks and utilities that
   1943 we use to make C++ code more robust, and various ways we use
   1944 C++ that may differ from what you see elsewhere.</p>
   1945 
   1946  
   1947 
   1948 <h3 id="Ownership_and_Smart_Pointers">Ownership and Smart Pointers</h3>
   1949 
   1950 <div class="summary">
   1951 <p>Prefer to have single, fixed owners for dynamically
   1952 allocated objects. Prefer to transfer ownership with smart
   1953 pointers.</p>
   1954 </div>
   1955 
   1956 <div class="stylebody">
   1957 
   1958 <div class="definition">
   1959 <p>"Ownership" is a bookkeeping technique for managing
   1960 dynamically allocated memory (and other resources). The
   1961 owner of a dynamically allocated object is an object or
   1962 function that is responsible for ensuring that it is
   1963 deleted when no longer needed. Ownership can sometimes be
   1964 shared, in which case the last owner is typically
   1965 responsible for deleting it. Even when ownership is not
   1966 shared, it can be transferred from one piece of code to
   1967 another.</p>
   1968 
   1969 <p>"Smart" pointers are classes that act like pointers,
   1970 e.g. by overloading the <code>*</code> and
   1971 <code>-&gt;</code> operators. Some smart pointer types
   1972 can be used to automate ownership bookkeeping, to ensure
   1973 these responsibilities are met.
   1974 <a href="http://en.cppreference.com/w/cpp/memory/unique_ptr">
   1975 <code>std::unique_ptr</code></a> is a smart pointer type
   1976 introduced in C++11, which expresses exclusive ownership
   1977 of a dynamically allocated object; the object is deleted
   1978 when the <code>std::unique_ptr</code> goes out of scope.
   1979 It cannot be copied, but can be <em>moved</em> to
   1980 represent ownership transfer.
   1981 <a href="http://en.cppreference.com/w/cpp/memory/shared_ptr">
   1982 <code>std::shared_ptr</code></a> is a smart pointer type
   1983 that expresses shared ownership of
   1984 a dynamically allocated object. <code>std::shared_ptr</code>s
   1985 can be copied; ownership of the object is shared among
   1986 all copies, and the object is deleted when the last
   1987 <code>std::shared_ptr</code> is destroyed. </p>
   1988 </div>
   1989 
   1990 <div class="pros">
   1991 <ul>
   1992   <li>It's virtually impossible to manage dynamically
   1993   allocated memory without some sort of ownership
   1994   logic.</li>
   1995 
   1996   <li>Transferring ownership of an object can be cheaper
   1997   than copying it (if copying it is even possible).</li>
   1998 
   1999   <li>Transferring ownership can be simpler than
   2000   'borrowing' a pointer or reference, because it reduces
   2001   the need to coordinate the lifetime of the object
   2002   between the two users.</li>
   2003 
   2004   <li>Smart pointers can improve readability by making
   2005   ownership logic explicit, self-documenting, and
   2006   unambiguous.</li>
   2007 
   2008   <li>Smart pointers can eliminate manual ownership
   2009   bookkeeping, simplifying the code and ruling out large
   2010   classes of errors.</li>
   2011 
   2012   <li>For const objects, shared ownership can be a simple
   2013   and efficient alternative to deep copying.</li>
   2014 </ul>
   2015 </div>
   2016 
   2017 <div class="cons">
   2018 <ul>
   2019   <li>Ownership must be represented and transferred via
   2020   pointers (whether smart or plain). Pointer semantics
   2021   are more complicated than value semantics, especially
   2022   in APIs: you have to worry not just about ownership,
   2023   but also aliasing, lifetime, and mutability, among
   2024   other issues.</li>
   2025 
   2026   <li>The performance costs of value semantics are often
   2027   overestimated, so the performance benefits of ownership
   2028   transfer might not justify the readability and
   2029   complexity costs.</li>
   2030 
   2031   <li>APIs that transfer ownership force their clients
   2032   into a single memory management model.</li>
   2033 
   2034   <li>Code using smart pointers is less explicit about
   2035   where the resource releases take place.</li>
   2036 
   2037   <li><code>std::unique_ptr</code> expresses ownership
   2038   transfer using C++11's move semantics, which are
   2039   relatively new and may confuse some programmers.</li>
   2040 
   2041   <li>Shared ownership can be a tempting alternative to
   2042   careful ownership design, obfuscating the design of a
   2043   system.</li>
   2044 
   2045   <li>Shared ownership requires explicit bookkeeping at
   2046   run-time, which can be costly.</li>
   2047 
   2048   <li>In some cases (e.g. cyclic references), objects
   2049   with shared ownership may never be deleted.</li>
   2050 
   2051   <li>Smart pointers are not perfect substitutes for
   2052   plain pointers.</li>
   2053 </ul>
   2054 </div>
   2055 
   2056 <div class="decision">
   2057 <p>If dynamic allocation is necessary, prefer to keep
   2058 ownership with the code that allocated it. If other code
   2059 needs access to the object, consider passing it a copy,
   2060 or passing a pointer or reference without transferring
   2061 ownership. Prefer to use <code>std::unique_ptr</code> to
   2062 make ownership transfer explicit. For example:</p>
   2063 
   2064 <pre>std::unique_ptr&lt;Foo&gt; FooFactory();
   2065 void FooConsumer(std::unique_ptr&lt;Foo&gt; ptr);
   2066 </pre>
   2067 
   2068 
   2069 
   2070 <p>Do not design your code to use shared ownership
   2071 without a very good reason. One such reason is to avoid
   2072 expensive copy operations, but you should only do this if
   2073 the performance benefits are significant, and the
   2074 underlying object is immutable (i.e.
   2075 <code>std::shared_ptr&lt;const Foo&gt;</code>).  If you
   2076 do use shared ownership, prefer to use
   2077 <code>std::shared_ptr</code>.</p>
   2078 
   2079 <p>Never use <code>std::auto_ptr</code>. Instead, use
   2080 <code>std::unique_ptr</code>.</p>
   2081 </div> 
   2082 
   2083 </div> 
   2084 
   2085 <h3 id="cpplint">cpplint</h3>
   2086 
   2087 <div class="summary">
   2088 <p>Use <code>cpplint.py</code>
   2089 to detect style errors.</p>
   2090 </div>
   2091 
   2092 <div class="stylebody">
   2093 
   2094 <p><code>cpplint.py</code>
   2095 is a tool that reads a source file and identifies many
   2096 style errors. It is not perfect, and has both false
   2097 positives and false negatives, but it is still a valuable
   2098 tool. False positives can be ignored by putting <code>//
   2099 NOLINT</code> at the end of the line or
   2100 <code>// NOLINTNEXTLINE</code> in the previous line.</p>
   2101 
   2102 
   2103 
   2104 <p>Some projects have instructions on
   2105 how to run <code>cpplint.py</code> from their project
   2106 tools. If the project you are contributing to does not,
   2107 you can download
   2108 <a href="https://raw.githubusercontent.com/google/styleguide/gh-pages/cpplint/cpplint.py">
   2109 <code>cpplint.py</code></a> separately.</p>
   2110 
   2111 </div> 
   2112 
   2113  
   2114 
   2115 <h2 id="Other_C++_Features">Other C++ Features</h2>
   2116 
   2117 <h3 id="Rvalue_references">Rvalue References</h3>
   2118 
   2119 <div class="summary">
   2120 <p>Use rvalue references only to define move constructors and move assignment
   2121 operators, or for perfect forwarding.
   2122 </p>
   2123 </div>
   2124 
   2125 <div class="stylebody">
   2126 
   2127 <div class="definition">
   2128 <p> Rvalue references
   2129 are a type of reference that can only bind to temporary
   2130 objects. The syntax is similar to traditional reference
   2131 syntax. For example, <code>void f(string&amp;&amp;
   2132 s);</code> declares a function whose argument is an
   2133 rvalue reference to a string.</p>
   2134 </div>
   2135 
   2136 <div class="pros">
   2137 <ul>
   2138   <li>Defining a move constructor (a constructor taking
   2139   an rvalue reference to the class type) makes it
   2140   possible to move a value instead of copying it. If
   2141   <code>v1</code> is a <code>std::vector&lt;string&gt;</code>,
   2142   for example, then <code>auto v2(std::move(v1))</code>
   2143   will probably just result in some simple pointer
   2144   manipulation instead of copying a large amount of data.
   2145   In some cases this can result in a major performance
   2146   improvement.</li>
   2147 
   2148   <li>Rvalue references make it possible to write a
   2149   generic function wrapper that forwards its arguments to
   2150   another function, and works whether or not its
   2151   arguments are temporary objects. (This is sometimes called
   2152   "perfect forwarding".)</li>
   2153 
   2154   <li>Rvalue references make it possible to implement
   2155   types that are movable but not copyable, which can be
   2156   useful for types that have no sensible definition of
   2157   copying but where you might still want to pass them as
   2158   function arguments, put them in containers, etc.</li>
   2159 
   2160   <li><code>std::move</code> is necessary to make
   2161   effective use of some standard-library types, such as
   2162   <code>std::unique_ptr</code>.</li>
   2163 </ul>
   2164 </div>
   2165 
   2166 <div class="cons">
   2167 <ul>
   2168   <li>Rvalue references are a relatively new feature
   2169   (introduced as part of C++11), and not yet widely
   2170   understood. Rules like reference collapsing, and
   2171   automatic synthesis of move constructors, are
   2172   complicated.</li>
   2173 </ul>
   2174 </div>
   2175 
   2176 <div class="decision">
   2177   <p>Use rvalue references only to define move constructors and move assignment
   2178   operators (as described in <a href="#Copyable_Movable_Types">Copyable and
   2179   Movable Types</a>) and, in conjunction with <code><a href="http://en.cppreference.com/w/cpp/utility/forward">std::forward</a></code>,
   2180 to support perfect forwarding.  You may use <code>std::move</code> to express
   2181 moving a value from one object to another rather than copying it. </p>
   2182 </div>
   2183 
   2184 </div> 
   2185 
   2186 <h3 id="Friends">Friends</h3>
   2187 
   2188 <div class="summary">
   2189 <p>We allow use of <code>friend</code> classes and functions,
   2190 within reason.</p>
   2191 </div>
   2192 
   2193 <div class="stylebody">
   2194 
   2195 <p>Friends should usually be defined in the same file so
   2196 that the reader does not have to look in another file to
   2197 find uses of the private members of a class. A common use
   2198 of <code>friend</code> is to have a
   2199 <code>FooBuilder</code> class be a friend of
   2200 <code>Foo</code> so that it can construct the inner state
   2201 of <code>Foo</code> correctly, without exposing this
   2202 state to the world. In some cases it may be useful to
   2203 make a unittest class a friend of the class it tests.</p>
   2204 
   2205 <p>Friends extend, but do not break, the encapsulation
   2206 boundary of a class. In some cases this is better than
   2207 making a member public when you want to give only one
   2208 other class access to it. However, most classes should
   2209 interact with other classes solely through their public
   2210 members.</p>
   2211 
   2212 </div> 
   2213 
   2214 <h3 id="Exceptions">Exceptions</h3>
   2215 
   2216 <div class="summary">
   2217 <p>We do not use C++ exceptions.</p>
   2218 </div>
   2219 
   2220 <div class="stylebody">
   2221 
   2222 <div class="pros">
   2223 <ul>
   2224   <li>Exceptions allow higher levels of an application to
   2225   decide how to handle "can't happen" failures in deeply
   2226   nested functions, without the obscuring and error-prone
   2227   bookkeeping of error codes.</li>
   2228 
   2229   
   2230 
   2231   <li>Exceptions are used by most other
   2232   modern languages. Using them in C++ would make it more
   2233   consistent with Python, Java, and the C++ that others
   2234   are familiar with.</li>
   2235 
   2236   <li>Some third-party C++ libraries use exceptions, and
   2237   turning them off internally makes it harder to
   2238   integrate with those libraries.</li>
   2239 
   2240   <li>Exceptions are the only way for a constructor to
   2241   fail. We can simulate this with a factory function or
   2242   an <code>Init()</code> method, but these require heap
   2243   allocation or a new "invalid" state, respectively.</li>
   2244 
   2245   <li>Exceptions are really handy in testing
   2246   frameworks.</li>
   2247 </ul>
   2248 </div>
   2249 
   2250 <div class="cons">
   2251 <ul>
   2252   <li>When you add a <code>throw</code> statement to an
   2253   existing function, you must examine all of its
   2254   transitive callers. Either they must make at least the
   2255   basic exception safety guarantee, or they must never
   2256   catch the exception and be happy with the program
   2257   terminating as a result. For instance, if
   2258   <code>f()</code> calls <code>g()</code> calls
   2259   <code>h()</code>, and <code>h</code> throws an
   2260   exception that <code>f</code> catches, <code>g</code>
   2261   has to be careful or it may not clean up properly.</li>
   2262 
   2263   <li>More generally, exceptions make the control flow of
   2264   programs difficult to evaluate by looking at code:
   2265   functions may return in places you don't expect. This
   2266   causes maintainability and debugging difficulties. You
   2267   can minimize this cost via some rules on how and where
   2268   exceptions can be used, but at the cost of more that a
   2269   developer needs to know and understand.</li>
   2270 
   2271   <li>Exception safety requires both RAII and different
   2272   coding practices. Lots of supporting machinery is
   2273   needed to make writing correct exception-safe code
   2274   easy. Further, to avoid requiring readers to understand
   2275   the entire call graph, exception-safe code must isolate
   2276   logic that writes to persistent state into a "commit"
   2277   phase. This will have both benefits and costs (perhaps
   2278   where you're forced to obfuscate code to isolate the
   2279   commit). Allowing exceptions would force us to always
   2280   pay those costs even when they're not worth it.</li>
   2281 
   2282   <li>Turning on exceptions adds data to each binary
   2283   produced, increasing compile time (probably slightly)
   2284   and possibly increasing address space pressure.
   2285   </li>
   2286 
   2287   <li>The availability of exceptions may encourage
   2288   developers to throw them when they are not appropriate
   2289   or recover from them when it's not safe to do so. For
   2290   example, invalid user input should not cause exceptions
   2291   to be thrown. We would need to make the style guide
   2292   even longer to document these restrictions!</li>
   2293 </ul>
   2294 </div>
   2295 
   2296 <div class="decision">
   2297 <p>On their face, the benefits of using exceptions
   2298 outweigh the costs, especially in new projects. However,
   2299 for existing code, the introduction of exceptions has
   2300 implications on all dependent code. If exceptions can be
   2301 propagated beyond a new project, it also becomes
   2302 problematic to integrate the new project into existing
   2303 exception-free code. Because most existing C++ code at
   2304 Google is not prepared to deal with exceptions, it is
   2305 comparatively difficult to adopt new code that generates
   2306 exceptions.</p>
   2307 
   2308 <p>Given that Google's existing code is not
   2309 exception-tolerant, the costs of using exceptions are
   2310 somewhat greater than the costs in a new project. The
   2311 conversion process would be slow and error-prone. We
   2312 don't believe that the available alternatives to
   2313 exceptions, such as error codes and assertions, introduce
   2314 a significant burden. </p>
   2315 
   2316 <p>Our advice against using exceptions is not predicated
   2317 on philosophical or moral grounds, but practical ones.
   2318  Because we'd like to use our open-source
   2319 projects at Google and it's difficult to do so if those
   2320 projects use exceptions, we need to advise against
   2321 exceptions in Google open-source projects as well.
   2322 Things would probably be different if we had to do it all
   2323 over again from scratch.</p>
   2324 
   2325 <p>This prohibition also applies to the exception-related
   2326 features added in C++11, such as <code>noexcept</code>,
   2327 <code>std::exception_ptr</code>, and
   2328 <code>std::nested_exception</code>.</p>
   2329 
   2330 <p>There is an <a href="#Windows_Code">exception</a> to
   2331 this rule (no pun intended) for Windows code.</p>
   2332 </div>
   2333 
   2334 </div> 
   2335 
   2336 <h3 id="Run-Time_Type_Information__RTTI_">Run-Time Type
   2337 Information (RTTI)</h3>
   2338 
   2339 <div class="summary">
   2340 <p>Avoid using Run Time Type Information (RTTI).</p>
   2341 </div>
   2342 
   2343 <div class="stylebody">
   2344 
   2345 <div class="definition">
   2346 <p> RTTI allows a
   2347 programmer to query the C++ class of an object at run
   2348 time. This is done by use of <code>typeid</code> or
   2349 <code>dynamic_cast</code>.</p>
   2350 </div>
   2351 
   2352 <div class="cons">
   2353 <p>Querying the type of an object at run-time frequently
   2354 means a design problem. Needing to know the type of an
   2355 object at runtime is often an indication that the design
   2356 of your class hierarchy is flawed.</p>
   2357 
   2358 <p>Undisciplined use of RTTI makes code hard to maintain.
   2359 It can lead to type-based decision trees or switch
   2360 statements scattered throughout the code, all of which
   2361 must be examined when making further changes.</p>
   2362 </div>
   2363 
   2364 <div class="pros">
   2365 <p>The standard alternatives to RTTI (described below)
   2366 require modification or redesign of the class hierarchy
   2367 in question. Sometimes such modifications are infeasible
   2368 or undesirable, particularly in widely-used or mature
   2369 code.</p>
   2370 
   2371 <p>RTTI can be useful in some unit tests. For example, it
   2372 is useful in tests of factory classes where the test has
   2373 to verify that a newly created object has the expected
   2374 dynamic type. It is also useful in managing the
   2375 relationship between objects and their mocks.</p>
   2376 
   2377 <p>RTTI is useful when considering multiple abstract
   2378 objects. Consider</p>
   2379 
   2380 <pre>bool Base::Equal(Base* other) = 0;
   2381 bool Derived::Equal(Base* other) {
   2382   Derived* that = dynamic_cast&lt;Derived*&gt;(other);
   2383   if (that == NULL)
   2384     return false;
   2385   ...
   2386 }
   2387 </pre>
   2388 </div>
   2389 
   2390 <div class="decision">
   2391 <p>RTTI has legitimate uses but is prone to abuse, so you
   2392 must be careful when using it. You may use it freely in
   2393 unittests, but avoid it when possible in other code. In
   2394 particular, think twice before using RTTI in new code. If
   2395 you find yourself needing to write code that behaves
   2396 differently based on the class of an object, consider one
   2397 of the following alternatives to querying the type:</p>
   2398 
   2399 <ul>
   2400   <li>Virtual methods are the preferred way of executing
   2401   different code paths depending on a specific subclass
   2402   type. This puts the work within the object itself.</li>
   2403 
   2404   <li>If the work belongs outside the object and instead
   2405   in some processing code, consider a double-dispatch
   2406   solution, such as the Visitor design pattern. This
   2407   allows a facility outside the object itself to
   2408   determine the type of class using the built-in type
   2409   system.</li>
   2410 </ul>
   2411 
   2412 <p>When the logic of a program guarantees that a given
   2413 instance of a base class is in fact an instance of a
   2414 particular derived class, then a
   2415 <code>dynamic_cast</code> may be used freely on the
   2416 object.  Usually one
   2417 can use a <code>static_cast</code> as an alternative in
   2418 such situations.</p>
   2419 
   2420 <p>Decision trees based on type are a strong indication
   2421 that your code is on the wrong track.</p>
   2422 
   2423 <pre class="badcode">if (typeid(*data) == typeid(D1)) {
   2424   ...
   2425 } else if (typeid(*data) == typeid(D2)) {
   2426   ...
   2427 } else if (typeid(*data) == typeid(D3)) {
   2428 ...
   2429 </pre>
   2430 
   2431 <p>Code such as this usually breaks when additional
   2432 subclasses are added to the class hierarchy. Moreover,
   2433 when properties of a subclass change, it is difficult to
   2434 find and modify all the affected code segments.</p>
   2435 
   2436 <p>Do not hand-implement an RTTI-like workaround. The
   2437 arguments against RTTI apply just as much to workarounds
   2438 like class hierarchies with type tags. Moreover,
   2439 workarounds disguise your true intent.</p>
   2440 </div>
   2441 
   2442 </div> 
   2443 
   2444 <h3 id="Casting">Casting</h3>
   2445 
   2446 <div class="summary">
   2447 <p>Use C++-style casts
   2448 like <code>static_cast&lt;float&gt;(double_value)</code>, or brace
   2449 initialization for conversion of arithmetic types like
   2450 <code>int64 y = int64{1} &lt;&lt; 42</code>. Do not use
   2451 cast formats like
   2452 <code>int y = (int)x</code> or <code>int y = int(x)</code> (but the latter
   2453 is okay when invoking a constructor of a class type).</p>
   2454 </div>
   2455 
   2456 <div class="stylebody">
   2457 
   2458 <div class="definition">
   2459 <p> C++ introduced a
   2460 different cast system from C that distinguishes the types
   2461 of cast operations.</p>
   2462 </div>
   2463 
   2464 <div class="pros">
   2465 <p>The problem with C casts is the ambiguity of the operation;
   2466 sometimes you are doing a <em>conversion</em>
   2467 (e.g., <code>(int)3.5</code>) and sometimes you are doing
   2468 a <em>cast</em> (e.g., <code>(int)"hello"</code>). Brace
   2469 initialization and C++ casts can often help avoid this
   2470 ambiguity. Additionally, C++ casts are more visible when searching for
   2471 them.</p>
   2472 </div>
   2473 
   2474 <div class="cons">
   2475 <p>The C++-style cast syntax is verbose and cumbersome.</p>
   2476 </div>
   2477 
   2478 <div class="decision">
   2479 <p>Do not use C-style casts. Instead, use these C++-style casts when
   2480 explicit type conversion is necessary. </p>
   2481 
   2482 <ul>
   2483   <li>Use brace initialization to convert arithmetic types
   2484   (e.g. <code>int64{x}</code>).  This is the safest approach because code
   2485   will not compile if conversion can result in information loss.  The
   2486   syntax is also concise.</li>
   2487 
   2488   
   2489 
   2490   <li>Use <code>static_cast</code> as the equivalent of a C-style cast
   2491   that does value conversion, when you need to
   2492   explicitly up-cast a pointer from a class to its superclass, or when
   2493   you need to explicitly cast a pointer from a superclass to a
   2494   subclass.  In this last case, you must be sure your object is
   2495   actually an instance of the subclass.</li>
   2496 
   2497    
   2498 
   2499   <li>Use <code>const_cast</code> to remove the
   2500   <code>const</code> qualifier (see <a href="#Use_of_const">const</a>).</li>
   2501 
   2502   <li>Use <code>reinterpret_cast</code> to do unsafe
   2503   conversions of pointer types to and from integer and
   2504   other pointer types. Use this only if you know what you
   2505   are doing and you understand the aliasing issues.
   2506   </li>
   2507 
   2508   
   2509 </ul>
   2510 
   2511 <p>See the <a href="#Run-Time_Type_Information__RTTI_">
   2512 RTTI section</a> for guidance on the use of
   2513 <code>dynamic_cast</code>.</p>
   2514 </div>
   2515 
   2516 </div> 
   2517 
   2518 <h3 id="Streams">Streams</h3>
   2519 
   2520 <div class="summary">
   2521 <p>Use streams where appropriate, and stick to "simple"
   2522 usages.</p>
   2523 </div>
   2524 
   2525 <div class="stylebody">
   2526 
   2527 <div class="definition">
   2528 <p>Streams are the standard I/O abstraction in C++, as
   2529 exemplified by the standard header <code>&lt;iostream&gt;</code>.
   2530 They are widely used in Google code, but only for debug logging
   2531 and test diagnostics.</p>
   2532 </div>
   2533 
   2534 <div class="pros">
   2535 <p>The <code>&lt;&lt;</code> and <code>&gt;&gt;</code>
   2536 stream operators provide an API for formatted I/O that
   2537 is easily learned, portable, reusable, and extensible.
   2538 <code>printf</code>, by contrast, doesn't even support
   2539 <code>string</code>, to say nothing of user-defined types,
   2540 and is very difficult to use portably.
   2541 <code>printf</code> also obliges you to choose among the
   2542 numerous slightly different versions of that function,
   2543 and navigate the dozens of conversion specifiers.</p>
   2544 
   2545 <p>Streams provide first-class support for console I/O
   2546 via <code>std::cin</code>, <code>std::cout</code>,
   2547 <code>std::cerr</code>, and <code>std::clog</code>.
   2548 The C APIs do as well, but are hampered by the need to
   2549 manually buffer the input. </p>
   2550 </div>
   2551 
   2552 <div class="cons">
   2553 <ul>
   2554 <li>Stream formatting can be configured by mutating the
   2555 state of the stream. Such mutations are persistent, so
   2556 the behavior of your code can be affected by the entire
   2557 previous history of the stream, unless you go out of your
   2558 way to restore it to a known state every time other code
   2559 might have touched it. User code can not only modify the
   2560 built-in state, it can add new state variables and behaviors
   2561 through a registration system.</li>
   2562 
   2563 <li>It is difficult to precisely control stream output, due
   2564 to the above issues, the way code and data are mixed in
   2565 streaming code, and the use of operator overloading (which
   2566 may select a different overload than you expect).</li>
   2567 
   2568 <li>The practice of building up output through chains
   2569 of <code>&lt;&lt;</code> operators interferes with
   2570 internationalization, because it bakes word order into the
   2571 code, and streams' support for localization is <a href="http://www.boost.org/doc/libs/1_48_0/libs/locale/doc/html/rationale.html#rationale_why">
   2572 flawed</a>.</li>
   2573 
   2574 
   2575 
   2576 
   2577 
   2578 <li>The streams API is subtle and complex, so programmers must
   2579 develop experience with it in order to use it effectively.
   2580 However, streams were historically banned in Google code (except
   2581 for logging and diagnostics), so Google engineers tend not to
   2582 have that experience. Consequently, streams-based code is likely
   2583 to be less readable and maintainable by Googlers than code based
   2584 on more familiar abstractions.</li>
   2585 
   2586 <li>Resolving the many overloads of <code>&lt;&lt;</code> is
   2587 extremely costly for the compiler. When used pervasively in a
   2588 large code base, it can consume as much as 20% of the parsing
   2589 and semantic analysis time.</li>
   2590 </ul>
   2591 </div>
   2592 
   2593 <div class="decision">
   2594 <p>Use streams only when they are the best tool for the job.
   2595 This is typically the case when the I/O is ad-hoc, local,
   2596 human-readable, and targeted at other developers rather than
   2597 end-users. Be consistent with the code around you, and with the
   2598 codebase as a whole; if there's an established tool for
   2599 your problem, use that tool instead. </p>
   2600 
   2601 <p>Avoid using streams for I/O that faces external users or
   2602 handles untrusted data. Instead, find and use the appropriate
   2603 templating libraries to handle issues like internationalization,
   2604 localization, and security hardening.</p>
   2605 
   2606 <p>If you do use streams, avoid the stateful parts of the
   2607 streams API (other than error state), such as <code>imbue()</code>,
   2608 <code>xalloc()</code>, and <code>register_callback()</code>.
   2609 Use explicit formatting functions  rather than
   2610 stream manipulators or formatting flags to control formatting
   2611 details such as number base, precision, or padding.</p>
   2612 
   2613 <p>Overload <code>&lt;&lt;</code> as a streaming operator
   2614 for your type only if your type represents a value, and
   2615 <code>&lt;&lt;</code> writes out a human-readable string
   2616 representation of that value. Avoid exposing implementation
   2617 details in the output of <code>&lt;&lt;</code>; if you need to print
   2618 object internals for debugging, use named functions instead
   2619 (a method named <code>DebugString()</code> is the most common
   2620 convention).</p>
   2621 </div>
   2622 
   2623 </div> 
   2624 
   2625 <h3 id="Preincrement_and_Predecrement">Preincrement and Predecrement</h3>
   2626 
   2627 <div class="summary">
   2628 <p>Use prefix form (<code>++i</code>) of the increment and
   2629 decrement operators with iterators and other template
   2630 objects.</p>
   2631 </div>
   2632 
   2633 <div class="stylebody">
   2634 
   2635 <div class="definition">
   2636 <p> When a variable
   2637 is incremented (<code>++i</code> or <code>i++</code>) or
   2638 decremented (<code>--i</code> or <code>i--</code>) and
   2639 the value of the expression is not used, one must decide
   2640 whether to preincrement (decrement) or postincrement
   2641 (decrement).</p>
   2642 </div>
   2643 
   2644 <div class="pros">
   2645 <p>When the return value is ignored, the "pre" form
   2646 (<code>++i</code>) is never less efficient than the
   2647 "post" form (<code>i++</code>), and is often more
   2648 efficient. This is because post-increment (or decrement)
   2649 requires a copy of <code>i</code> to be made, which is
   2650 the value of the expression. If <code>i</code> is an
   2651 iterator or other non-scalar type, copying <code>i</code>
   2652 could be expensive. Since the two types of increment
   2653 behave the same when the value is ignored, why not just
   2654 always pre-increment?</p>
   2655 </div>
   2656 
   2657 <div class="cons">
   2658 <p>The tradition developed, in C, of using post-increment
   2659 when the expression value is not used, especially in
   2660 <code>for</code> loops. Some find post-increment easier
   2661 to read, since the "subject" (<code>i</code>) precedes
   2662 the "verb" (<code>++</code>), just like in English.</p>
   2663 </div>
   2664 
   2665 <div class="decision">
   2666 <p> For simple scalar
   2667 (non-object) values there is no reason to prefer one form
   2668 and we allow either. For iterators and other template
   2669 types, use pre-increment.</p>
   2670 </div>
   2671 
   2672 </div> 
   2673 
   2674 <h3 id="Use_of_const">Use of const</h3>
   2675 
   2676 <div class="summary">
   2677 <p>Use <code>const</code> whenever it makes sense. With C++11,
   2678 <code>constexpr</code> is a better choice for some uses of
   2679 const.</p>
   2680 </div>
   2681 
   2682 <div class="stylebody">
   2683 
   2684 <div class="definition">
   2685 <p> Declared variables and parameters can be preceded
   2686 by the keyword <code>const</code> to indicate the variables
   2687 are not changed (e.g., <code>const int foo</code>). Class
   2688 functions can have the <code>const</code> qualifier to
   2689 indicate the function does not change the state of the
   2690 class member variables (e.g., <code>class Foo { int
   2691 Bar(char c) const; };</code>).</p>
   2692 </div>
   2693 
   2694 <div class="pros">
   2695 <p>Easier for people to understand how variables are being
   2696 used. Allows the compiler to do better type checking,
   2697 and, conceivably, generate better code. Helps people
   2698 convince themselves of program correctness because they
   2699 know the functions they call are limited in how they can
   2700 modify your variables. Helps people know what functions
   2701 are safe to use without locks in multi-threaded
   2702 programs.</p>
   2703 </div>
   2704 
   2705 <div class="cons">
   2706 <p><code>const</code> is viral: if you pass a
   2707 <code>const</code> variable to a function, that function
   2708 must have <code>const</code> in its prototype (or the
   2709 variable will need a <code>const_cast</code>). This can
   2710 be a particular problem when calling library
   2711 functions.</p>
   2712 </div>
   2713 
   2714 <div class="decision">
   2715 <p><code>const</code> variables, data members, methods
   2716 and arguments add a level of compile-time type checking;
   2717 it is better to detect errors as soon as possible.
   2718 Therefore we strongly recommend that you use
   2719 <code>const</code> whenever it makes sense to do so:</p>
   2720 
   2721 <ul>
   2722   <li>If a function guarantees that it will not modify an argument
   2723   passed by reference or by pointer, the corresponding function parameter
   2724   should be a reference-to-const (<code>const T&amp;</code>) or
   2725   pointer-to-const (<code>const T*</code>), respectively.</li>
   2726 
   2727   <li>Declare methods to be <code>const</code> whenever
   2728   possible. Accessors should almost always be
   2729   <code>const</code>. Other methods should be const if
   2730   they do not modify any data members, do not call any
   2731   non-<code>const</code> methods, and do not return a
   2732   non-<code>const</code> pointer or
   2733   non-<code>const</code> reference to a data member.</li>
   2734 
   2735   <li>Consider making data members <code>const</code>
   2736   whenever they do not need to be modified after
   2737   construction.</li>
   2738 </ul>
   2739 
   2740 <p>The <code>mutable</code> keyword is allowed but is
   2741 unsafe when used with threads, so thread safety should be
   2742 carefully considered first.</p>
   2743 </div>
   2744 
   2745 <div class="stylepoint_subsection">
   2746 <h4>Where to put the const</h4>
   2747 
   2748 <p>Some people favor the form <code>int const *foo</code>
   2749 to <code>const int* foo</code>. They argue that this is
   2750 more readable because it's more consistent: it keeps the
   2751 rule that <code>const</code> always follows the object
   2752 it's describing. However, this consistency argument
   2753 doesn't apply in codebases with few deeply-nested pointer
   2754 expressions since most <code>const</code> expressions
   2755 have only one <code>const</code>, and it applies to the
   2756 underlying value. In such cases, there's no consistency
   2757 to maintain. Putting the <code>const</code> first is
   2758 arguably more readable, since it follows English in
   2759 putting the "adjective" (<code>const</code>) before the
   2760 "noun" (<code>int</code>).</p>
   2761 
   2762 <p>That said, while we encourage putting
   2763 <code>const</code> first, we do not require it. But be
   2764 consistent with the code around you!</p>
   2765 </div>
   2766 
   2767 </div> 
   2768 
   2769 <h3 id="Use_of_constexpr">Use of constexpr</h3>
   2770 
   2771 <div class="summary">
   2772 <p>In C++11, use <code>constexpr</code> to define true
   2773 constants or to ensure constant initialization.</p>
   2774 </div>
   2775 
   2776 <div class="stylebody">
   2777 
   2778 <div class="definition">
   2779 <p> Some variables can be declared <code>constexpr</code>
   2780 to indicate the variables are true constants, i.e. fixed at
   2781 compilation/link time. Some functions and constructors
   2782 can be declared <code>constexpr</code> which enables them
   2783 to be used in defining a <code>constexpr</code>
   2784 variable.</p>
   2785 </div>
   2786 
   2787 <div class="pros">
   2788 <p>Use of <code>constexpr</code> enables definition of
   2789 constants with floating-point expressions rather than
   2790 just literals; definition of constants of user-defined
   2791 types; and definition of constants with function
   2792 calls.</p>
   2793 </div>
   2794 
   2795 <div class="cons">
   2796 <p>Prematurely marking something as constexpr may cause
   2797 migration problems if later on it has to be downgraded.
   2798 Current restrictions on what is allowed in constexpr
   2799 functions and constructors may invite obscure workarounds
   2800 in these definitions.</p>
   2801 </div>
   2802 
   2803 <div class="decision">
   2804 <p><code>constexpr</code> definitions enable a more
   2805 robust specification of the constant parts of an
   2806 interface. Use <code>constexpr</code> to specify true
   2807 constants and the functions that support their
   2808 definitions. Avoid complexifying function definitions to
   2809 enable their use with <code>constexpr</code>. Do not use
   2810 <code>constexpr</code> to force inlining.</p>
   2811 </div>
   2812 
   2813 </div> 
   2814 
   2815 <h3 id="Integer_Types">Integer Types</h3>
   2816 
   2817 <div class="summary">
   2818 <p>Of the built-in C++ integer types, the only one used
   2819  is
   2820 <code>int</code>. If a program needs a variable of a
   2821 different size, use 
   2822 a precise-width integer type from
   2823 <code>&lt;stdint.h&gt;</code>, such as
   2824 <code>int16_t</code>. If your variable represents a
   2825 value that could ever be greater than or equal to 2^31
   2826 (2GiB), use a 64-bit type such as
   2827 <code>int64_t</code>.
   2828 Keep in mind that even if your value won't ever be too large
   2829 for an <code>int</code>, it may be used in intermediate
   2830 calculations which may require a larger type. When in doubt,
   2831 choose a larger type.</p>
   2832 </div>
   2833 
   2834 <div class="stylebody">
   2835 
   2836 <div class="definition">
   2837 <p> C++ does not specify the sizes of its integer types.
   2838 Typically people assume that <code>short</code> is 16 bits,
   2839 <code>int</code> is 32 bits, <code>long</code> is 32 bits
   2840 and <code>long long</code> is 64 bits.</p>
   2841 </div>
   2842 
   2843 <div class="pros">
   2844 <p>Uniformity of declaration.</p>
   2845 </div>
   2846 
   2847 <div class="cons">
   2848 <p>The sizes of integral types in C++ can vary based on
   2849 compiler and architecture.</p>
   2850 </div>
   2851 
   2852 <div class="decision">
   2853 
   2854 <p>
   2855 <code>&lt;stdint.h&gt;</code> defines types
   2856 like <code>int16_t</code>, <code>uint32_t</code>,
   2857 <code>int64_t</code>, etc. You should always use
   2858 those in preference to <code>short</code>, <code>unsigned
   2859 long long</code> and the like, when you need a guarantee
   2860 on the size of an integer. Of the C integer types, only
   2861 <code>int</code> should be used. When appropriate, you
   2862 are welcome to use standard types like
   2863 <code>size_t</code> and <code>ptrdiff_t</code>.</p>
   2864 
   2865 <p>We use <code>int</code> very often, for integers we
   2866 know are not going to be too big, e.g., loop counters.
   2867 Use plain old <code>int</code> for such things. You
   2868 should assume that an <code>int</code> is
   2869 
   2870 at least 32 bits, but don't
   2871 assume that it has more than 32 bits. If you need a 64-bit
   2872 integer type, use
   2873 <code>int64_t</code>
   2874 or
   2875 <code>uint64_t</code>.</p>
   2876 
   2877 <p>For integers we know can be "big",
   2878  use
   2879 <code>int64_t</code>.
   2880 </p>
   2881 
   2882 <p>You should not use the unsigned integer types such as
   2883 <code>uint32_t</code>, unless there is a valid
   2884 reason such as representing a bit pattern rather than a
   2885 number, or you need defined overflow modulo 2^N. In
   2886 particular, do not use unsigned types to say a number
   2887 will never be negative. Instead, use 
   2888 assertions for this.</p>
   2889 
   2890 
   2891 
   2892 <p>If your code is a container that returns a size, be
   2893 sure to use a type that will accommodate any possible
   2894 usage of your container. When in doubt, use a larger type
   2895 rather than a smaller type.</p>
   2896 
   2897 <p>Use care when converting integer types. Integer
   2898 conversions and promotions can cause non-intuitive
   2899 behavior. </p>
   2900 </div>
   2901 
   2902 <div class="stylepoint_subsection">
   2903 
   2904 <h4>On Unsigned Integers</h4>
   2905 
   2906 <p>Some people, including some textbook authors,
   2907 recommend using unsigned types to represent numbers that
   2908 are never negative. This is intended as a form of
   2909 self-documentation. However, in C, the advantages of such
   2910 documentation are outweighed by the real bugs it can
   2911 introduce. Consider:</p>
   2912 
   2913 <pre>for (unsigned int i = foo.Length()-1; i &gt;= 0; --i) ...
   2914 </pre>
   2915 
   2916 <p>This code will never terminate! Sometimes gcc will
   2917 notice this bug and warn you, but often it will not.
   2918 Equally bad bugs can occur when comparing signed and
   2919 unsigned variables. Basically, C's type-promotion scheme
   2920 causes unsigned types to behave differently than one
   2921 might expect.</p>
   2922 
   2923 <p>So, document that a variable is non-negative using
   2924 assertions. Don't use an unsigned
   2925 type.</p>
   2926 </div>
   2927 
   2928 </div> 
   2929 
   2930 <h3 id="64-bit_Portability">64-bit Portability</h3>
   2931 
   2932 <div class="summary">
   2933 <p>Code should be 64-bit and 32-bit friendly. Bear in mind
   2934 problems of printing, comparisons, and structure alignment.</p>
   2935 </div>
   2936 
   2937 <div class="stylebody">
   2938 
   2939 <ul>
   2940   <li>
   2941   <p><code>printf()</code> specifiers for some types
   2942   are not cleanly portable between 32-bit and 64-bit
   2943   systems. C99 defines some portable format specifiers.
   2944   Unfortunately, MSVC 7.1 does not understand some of
   2945   these specifiers and the standard is missing a few,
   2946   so we 
   2947   have to define our own ugly versions in some cases
   2948    (in the style of the standard include file
   2949   <code>inttypes.h</code>):</p>
   2950 
   2951   <div>
   2952   <pre>// printf macros for size_t, in the style of inttypes.h
   2953 #ifdef _LP64
   2954 #define __PRIS_PREFIX "z"
   2955 #else
   2956 #define __PRIS_PREFIX
   2957 #endif
   2958 
   2959 // Use these macros after a % in a printf format string
   2960 // to get correct 32/64 bit behavior, like this:
   2961 // size_t size = records.size();
   2962 // printf("%" PRIuS "\n", size);
   2963 
   2964 #define PRIdS __PRIS_PREFIX "d"
   2965 #define PRIxS __PRIS_PREFIX "x"
   2966 #define PRIuS __PRIS_PREFIX "u"
   2967 #define PRIXS __PRIS_PREFIX "X"
   2968 #define PRIoS __PRIS_PREFIX "o"
   2969   </pre>
   2970   </div> 
   2971 
   2972   <table border="1" summary="portable printf specifiers">
   2973   <tbody><tr align="center">
   2974     <th>Type</th>
   2975     <th>DO NOT use</th>
   2976     <th>DO use</th>
   2977     <th>Notes</th>
   2978   </tr>
   2979 
   2980   <tr align="center">
   2981     <td><code>void *</code> (or any pointer)</td>
   2982     <td><code>%lx</code></td>
   2983     <td><code>%p</code></td>
   2984     <td></td>
   2985   </tr>
   2986 
   2987   
   2988 
   2989   <tr align="center">
   2990     <td><code>int64_t</code></td>
   2991     <td><code>%qd</code>, <code>%lld</code></td>
   2992     <td><code>%" PRId64 "</code></td>
   2993     <td></td>
   2994   </tr>
   2995 
   2996   
   2997 
   2998   <tr align="center">
   2999     <td><code>uint64_t</code></td>
   3000     <td><code>%qu</code>, <code>%llu</code>,
   3001                   <code>%llx</code></td>
   3002     <td><code>%" PRIu64 "</code>,
   3003                   <code>%" PRIx64 "</code></td>
   3004     <td></td>
   3005   </tr>
   3006 
   3007   
   3008 
   3009   <tr align="center">
   3010     <td><code>size_t</code></td>
   3011     <td><code>%u</code></td>
   3012     <td><code>%" PRIuS "</code>, <code>%" PRIxS "</code></td>
   3013     <td>
   3014     C99 specifies <code>%zu</code></td>
   3015   </tr>
   3016 
   3017   <tr align="center">
   3018     <td><code>ptrdiff_t</code></td>
   3019     <td><code>%d</code></td>
   3020     <td><code>%" PRIdS "</code></td>
   3021     <td>
   3022     C99 specifies <code>%td</code></td>
   3023   </tr>
   3024 
   3025   
   3026   </tbody></table>
   3027 
   3028   <p>Note that the <code>PRI*</code> macros expand to
   3029   independent strings which are concatenated by the
   3030   compiler. Hence if you are using a non-constant
   3031   format string, you need to insert the value of the
   3032   macro into the format, rather than the name. Note also
   3033   that spaces are required around the macro identifier to
   3034   separate it from the string literal. It is
   3035   still possible, as usual, to include length
   3036   specifiers, etc., after the <code>%</code> when using
   3037   the <code>PRI*</code> macros. So, e.g.
   3038   <code>printf("x = %30" PRIuS "\n", x)</code> would
   3039   expand on 32-bit Linux to <code>printf("x = %30" "u"
   3040   "\n", x)</code>, which the compiler will treat as
   3041   <code>printf("x = %30u\n", x)</code>.</p>
   3042 
   3043   
   3044   </li>
   3045 
   3046   <li>Remember that <code>sizeof(void *)</code> !=
   3047   <code>sizeof(int)</code>. Use <code>intptr_t</code> if
   3048   you want a pointer-sized integer.</li>
   3049 
   3050   <li>You may need to be careful with structure
   3051   alignments, particularly for structures being stored on
   3052   disk. Any class/structure with a 
   3053   <code>int64_t</code>/<code>uint64_t</code>
   3054   member will by default end up being 8-byte aligned on a
   3055   64-bit system. If you have such structures being shared
   3056   on disk between 32-bit and 64-bit code, you will need
   3057   to ensure that they are packed the same on both
   3058   architectures. 
   3059   Most compilers offer a way to
   3060   alter structure alignment. For gcc, you can use
   3061   <code>__attribute__((packed))</code>. MSVC offers
   3062   <code>#pragma pack()</code> and
   3063   <code>__declspec(align())</code>.</li>
   3064 
   3065   <li>
   3066   <p>Use the <code>LL</code> or <code>ULL</code>
   3067   suffixes as needed to create 64-bit constants. For
   3068   example:</p>
   3069 
   3070 
   3071 <pre>int64_t my_value = 0x123456789LL;
   3072 uint64_t my_mask = 3ULL &lt;&lt; 48;
   3073 </pre>
   3074   </li>
   3075 </ul>
   3076 
   3077 </div> 
   3078 
   3079 <h3 id="Preprocessor_Macros">Preprocessor Macros</h3>
   3080 
   3081 <div class="summary">
   3082 <p>Avoid defining macros, especially in headers; prefer
   3083 inline functions, enums, and <code>const</code> variables.
   3084 Name macros with a project-specific prefix. Do not use
   3085 macros to define pieces of a C++ API.</p>
   3086 </div>
   3087 
   3088 <div class="stylebody">
   3089 
   3090 <p>Macros mean that the code you see is not the same as
   3091 the code the compiler sees. This can introduce unexpected
   3092 behavior, especially since macros have global scope.</p>
   3093 
   3094 <p>The problems introduced by macros are especially severe
   3095 when they are used to define pieces of a C++ API,
   3096 and still more so for public APIs. Every error message from
   3097 the compiler when developers incorrectly use that interface
   3098 now must explain how the macros formed the interface.
   3099 Refactoring and analysis tools have a dramatically harder
   3100 time updating the interface. As a consequence, we
   3101 specifically disallow using macros in this way.
   3102 For example, avoid patterns like:</p>
   3103 
   3104 <pre class="badcode">class WOMBAT_TYPE(Foo) {
   3105   // ...
   3106 
   3107  public:
   3108   EXPAND_PUBLIC_WOMBAT_API(Foo)
   3109 
   3110   EXPAND_WOMBAT_COMPARISONS(Foo, ==, &lt;)
   3111 };
   3112 </pre>
   3113 
   3114 <p>Luckily, macros are not nearly as necessary in C++ as
   3115 they are in C. Instead of using a macro to inline
   3116 performance-critical code, use an inline function.
   3117 Instead of using a macro to store a constant, use a
   3118 <code>const</code> variable. Instead of using a macro to
   3119 "abbreviate" a long variable name, use a reference.
   3120 Instead of using a macro to conditionally compile code
   3121 ... well, don't do that at all (except, of course, for
   3122 the <code>#define</code> guards to prevent double
   3123 inclusion of header files). It makes testing much more
   3124 difficult.</p>
   3125 
   3126 <p>Macros can do things these other techniques cannot,
   3127 and you do see them in the codebase, especially in the
   3128 lower-level libraries. And some of their special features
   3129 (like stringifying, concatenation, and so forth) are not
   3130 available through the language proper. But before using a
   3131 macro, consider carefully whether there's a non-macro way
   3132 to achieve the same result. If you need to use a macro to
   3133 define an interface, contact 
   3134 your project leads to request
   3135 a waiver of this rule.</p>
   3136 
   3137 <p>The following usage pattern will avoid many problems
   3138 with macros; if you use macros, follow it whenever
   3139 possible:</p>
   3140 
   3141 <ul>
   3142   <li>Don't define macros in a <code>.h</code> file.</li>
   3143 
   3144   <li><code>#define</code> macros right before you use
   3145   them, and <code>#undef</code> them right after.</li>
   3146 
   3147   <li>Do not just <code>#undef</code> an existing macro
   3148   before replacing it with your own; instead, pick a name
   3149   that's likely to be unique.</li>
   3150 
   3151   <li>Try not to use macros that expand to unbalanced C++
   3152   constructs, or at least document that behavior
   3153   well.</li>
   3154 
   3155   <li>Prefer not using <code>##</code> to generate
   3156   function/class/variable names.</li>
   3157 </ul>
   3158 
   3159 <p>Exporting macros from headers (i.e. defining them in a header
   3160 without <code>#undef</code>ing them before the end of the header)
   3161 is extremely strongly discouraged. If you do export a macro from a
   3162 header, it must have a globally unique name. To achieve this, it
   3163 must be named with a prefix consisting of your project's namespace
   3164 name (but upper case). </p>
   3165 
   3166 </div> 
   3167 
   3168 <h3 id="0_and_nullptr/NULL">0 and nullptr/NULL</h3>
   3169 
   3170 <div class="summary">
   3171 <p>Use <code>0</code> for integers, <code>0.0</code> for
   3172 reals, <code>nullptr</code> (or <code>NULL</code>) for
   3173 pointers, and <code>'\0'</code> for chars.</p>
   3174 </div>
   3175 
   3176 <div class="stylebody">
   3177 
   3178 <p>Use <code>0</code> for integers and <code>0.0</code>
   3179 for reals. This is not controversial.</p>
   3180 
   3181 <p> For
   3182 pointers (address values), there is a choice between
   3183 <code>0</code>, <code>NULL</code>, and
   3184 <code>nullptr</code>. For projects that allow C++11
   3185 features, use <code>nullptr</code>. For C++03 projects,
   3186 we prefer <code>NULL</code> because it looks like a
   3187 pointer. In fact, some C++ compilers provide special
   3188 definitions of <code>NULL</code> which enable them to
   3189 give useful warnings, particularly in situations where
   3190 <code>sizeof(NULL)</code> is not equal to
   3191 <code>sizeof(0)</code>.</p>
   3192 
   3193 <p>Use <code>'\0'</code> for chars. This is the correct
   3194 type and also makes code more readable.</p>
   3195 
   3196 </div> 
   3197 
   3198 <h3 id="sizeof">sizeof</h3>
   3199 
   3200 <div class="summary">
   3201 <p>Prefer <code>sizeof(<var>varname</var>)</code> to
   3202 <code>sizeof(<var>type</var>)</code>.</p>
   3203 </div>
   3204 
   3205 <div class="stylebody">
   3206 
   3207 <p>Use <code>sizeof(<var>varname</var>)</code> when you
   3208 take the size of a particular variable.
   3209 <code>sizeof(<var>varname</var>)</code> will update
   3210 appropriately if someone changes the variable type either
   3211 now or later. You may use
   3212 <code>sizeof(<var>type</var>)</code> for code unrelated
   3213 to any particular variable, such as code that manages an
   3214 external or internal data format where a variable of an
   3215 appropriate C++ type is not convenient.</p>
   3216 
   3217 <pre>Struct data;
   3218 memset(&amp;data, 0, sizeof(data));
   3219 </pre>
   3220 
   3221 <pre class="badcode">memset(&amp;data, 0, sizeof(Struct));
   3222 </pre>
   3223 
   3224 <pre>if (raw_size &lt; sizeof(int)) {
   3225   LOG(ERROR) &lt;&lt; "compressed record not big enough for count: " &lt;&lt; raw_size;
   3226   return false;
   3227 }
   3228 </pre>
   3229 
   3230 </div> 
   3231 
   3232 <h3 id="auto">auto</h3>
   3233 
   3234 <div class="summary">
   3235 <p>Use <code>auto</code> to avoid type names that are noisy, obvious,
   3236 or unimportant - cases where the type doesn't aid in clarity for the
   3237 reader. Continue to use manifest type declarations when it helps
   3238 readability.</p>
   3239 </div>
   3240 
   3241 <div class="stylebody">
   3242 
   3243 <div class="pros">
   3244 <p>
   3245 </p><ul>
   3246 <li>C++ type names can be long and cumbersome, especially when they
   3247 involve templates or namespaces.</li>
   3248 <li>When a C++ type name is repeated within a single declaration or a
   3249 small code region, the repetition may not be aiding readability.</li>
   3250 <li>It is sometimes safer to let the type be specified by the type of
   3251 the initialization expression, since that avoids the possibility of
   3252 unintended copies or type conversions.</li>
   3253 </ul>
   3254 </div>
   3255 <div class="cons">
   3256 
   3257 <p>Sometimes code is clearer when types are manifest,
   3258 especially when a variable's initialization depends on
   3259 things that were declared far away. In expressions
   3260 like:</p>
   3261 
   3262 <pre class="badcode">auto foo = x.add_foo();
   3263 auto i = y.Find(key);
   3264 </pre>
   3265 
   3266 <p>it may not be obvious what the resulting types are if the type
   3267 of <code>y</code> isn't very well known, or if <code>y</code> was
   3268 declared many lines earlier.</p>
   3269 
   3270 <p>Programmers have to understand the difference between
   3271 <code>auto</code> and <code>const auto&amp;</code> or
   3272 they'll get copies when they didn't mean to.</p>
   3273 
   3274 <p>If an <code>auto</code> variable is used as part of an
   3275 interface, e.g. as a constant in a header, then a
   3276 programmer might change its type while only intending to
   3277 change its value, leading to a more radical API change
   3278 than intended.</p>
   3279 </div>
   3280 
   3281 <div class="decision">
   3282 
   3283 <p><code>auto</code> is permitted when it increases readability,
   3284 particularly as described below. Never initialize an <code>auto</code>-typed
   3285 variable with a braced initializer list.</p>
   3286 
   3287 <p>Specific cases where <code>auto</code> is allowed or encouraged:
   3288 </p><ul>
   3289 <li>(Encouraged) For iterators and other long/cluttery type names, particularly
   3290 when the type is clear from context (calls
   3291 to <code>find</code>, <code>begin</code>, or <code>end</code> for
   3292 instance).</li>
   3293 <li>(Allowed) When the type is clear from local context (in the same expression
   3294 or within a few lines).  Initialization of a pointer or smart pointer
   3295 with calls
   3296 to <code>new</code> 
   3297 commonly falls into this category, as does use of <code>auto</code> in
   3298 a range-based loop over a container whose type is spelled out
   3299 nearby.</li>
   3300 <li>(Allowed) When the type doesn't matter because it isn't being used for
   3301 anything other than equality comparison.</li>
   3302 <li>(Encouraged) When iterating over a map with a range-based loop
   3303 (because it is often assumed that the correct type
   3304 is <code>std::pair&lt;KeyType, ValueType&gt;</code> whereas it is actually
   3305 <code>std::pair&lt;const KeyType, ValueType&gt;</code>). This is
   3306 particularly well paired with local <code>key</code>
   3307 and <code>value</code> aliases for <code>.first</code>
   3308 and <code>.second</code> (often const-ref).
   3309 <pre class="code">for (const auto&amp; item : some_map) {
   3310   const KeyType&amp; key = item.first;
   3311   const ValType&amp; value = item.second;
   3312   // The rest of the loop can now just refer to key and value,
   3313   // a reader can see the types in question, and we've avoided
   3314   // the too-common case of extra copies in this iteration.
   3315 }
   3316 </pre>
   3317 </li>
   3318 </ul>
   3319 
   3320 </div>
   3321 
   3322 </div> 
   3323 
   3324 <h3 id="Braced_Initializer_List">Braced Initializer List</h3>
   3325 
   3326 <div class="summary">
   3327 <p>You may use braced initializer lists.</p>
   3328 </div>
   3329 
   3330 <div class="stylebody">
   3331 
   3332 <p>In C++03, aggregate types (arrays and structs with no
   3333 constructor) could be initialized with braced initializer lists.</p>
   3334 
   3335 <pre>struct Point { int x; int y; };
   3336 Point p = {1, 2};
   3337 </pre>
   3338 
   3339 <p>In C++11, this syntax was generalized, and any object type can now
   3340 be created with a braced initializer list, known as a
   3341 <i>braced-init-list</i> in the C++ grammar. Here are a few examples
   3342 of its use.</p>
   3343 
   3344 <pre>// Vector takes a braced-init-list of elements.
   3345 std::vector&lt;string&gt; v{"foo", "bar"};
   3346 
   3347 // Basically the same, ignoring some small technicalities.
   3348 // You may choose to use either form.
   3349 std::vector&lt;string&gt; v = {"foo", "bar"};
   3350 
   3351 // Usable with 'new' expressions.
   3352 auto p = new vector&lt;string&gt;{"foo", "bar"};
   3353 
   3354 // A map can take a list of pairs. Nested braced-init-lists work.
   3355 std::map&lt;int, string&gt; m = {{1, "one"}, {2, "2"}};
   3356 
   3357 // A braced-init-list can be implicitly converted to a return type.
   3358 std::vector&lt;int&gt; test_function() { return {1, 2, 3}; }
   3359 
   3360 // Iterate over a braced-init-list.
   3361 for (int i : {-1, -2, -3}) {}
   3362 
   3363 // Call a function using a braced-init-list.
   3364 void TestFunction2(std::vector&lt;int&gt; v) {}
   3365 TestFunction2({1, 2, 3});
   3366 </pre>
   3367 
   3368 <p>A user-defined type can also define a constructor and/or assignment operator
   3369 that take <code>std::initializer_list&lt;T&gt;</code>, which is automatically
   3370 created from <i>braced-init-list</i>:</p>
   3371 
   3372 <pre>class MyType {
   3373  public:
   3374   // std::initializer_list references the underlying init list.
   3375   // It should be passed by value.
   3376   MyType(std::initializer_list&lt;int&gt; init_list) {
   3377     for (int i : init_list) append(i);
   3378   }
   3379   MyType&amp; operator=(std::initializer_list&lt;int&gt; init_list) {
   3380     clear();
   3381     for (int i : init_list) append(i);
   3382   }
   3383 };
   3384 MyType m{2, 3, 5, 7};
   3385 </pre>
   3386 
   3387 <p>Finally, brace initialization can also call ordinary
   3388 constructors of data types, even if they do not have
   3389 <code>std::initializer_list&lt;T&gt;</code> constructors.</p>
   3390 
   3391 <pre>double d{1.23};
   3392 // Calls ordinary constructor as long as MyOtherType has no
   3393 // std::initializer_list constructor.
   3394 class MyOtherType {
   3395  public:
   3396   explicit MyOtherType(string);
   3397   MyOtherType(int, string);
   3398 };
   3399 MyOtherType m = {1, "b"};
   3400 // If the constructor is explicit, you can't use the "= {}" form.
   3401 MyOtherType m{"b"};
   3402 </pre>
   3403 
   3404 <p>Never assign a <i>braced-init-list</i> to an auto
   3405 local variable. In the single element case, what this
   3406 means can be confusing.</p>
   3407 
   3408 <pre class="badcode">auto d = {1.23};        // d is a std::initializer_list&lt;double&gt;
   3409 </pre>
   3410 
   3411 <pre>auto d = double{1.23};  // Good -- d is a double, not a std::initializer_list.
   3412 </pre>
   3413 
   3414 <p>See <a href="#Braced_Initializer_List_Format">Braced_Initializer_List_Format</a> for formatting.</p>
   3415 
   3416 </div> 
   3417 
   3418 <h3 id="Lambda_expressions">Lambda expressions</h3>
   3419 
   3420 <div class="summary">
   3421 <p>Use lambda expressions where appropriate. Prefer explicit captures
   3422 when the lambda will escape the current scope.</p>
   3423 </div>
   3424 
   3425 <div class="stylebody">
   3426 
   3427 <div class="definition">
   3428 
   3429 <p> Lambda expressions are a concise way of creating anonymous
   3430 function objects. They're often useful when passing
   3431 functions as arguments. For example:</p>
   3432 
   3433 <pre>std::sort(v.begin(), v.end(), [](int x, int y) {
   3434   return Weight(x) &lt; Weight(y);
   3435 });
   3436 </pre>
   3437 
   3438 <p> They further allow capturing variables from the enclosing scope either
   3439 explicitly by name, or implicitly using a default capture. Explicit captures
   3440 require each variable to be listed, as
   3441 either a value or reference capture:</p>
   3442 
   3443 <pre>int weight = 3;
   3444 int sum = 0;
   3445 // Captures `weight` by value and `sum` by reference.
   3446 std::for_each(v.begin(), v.end(), [weight, &amp;sum](int x) {
   3447   sum += weight * x;
   3448 });
   3449 </pre>
   3450 
   3451 
   3452 Default captures implicitly capture any variable referenced in the
   3453 lambda body, including <code>this</code> if any members are used:
   3454 
   3455 <pre>const std::vector&lt;int&gt; lookup_table = ...;
   3456 std::vector&lt;int&gt; indices = ...;
   3457 // Captures `lookup_table` by reference, sorts `indices` by the value
   3458 // of the associated element in `lookup_table`.
   3459 std::sort(indices.begin(), indices.end(), [&amp;](int a, int b) {
   3460   return lookup_table[a] &lt; lookup_table[b];
   3461 });
   3462 </pre>
   3463 
   3464 <p>Lambdas were introduced in C++11 along with a set of utilities
   3465 for working with function objects, such as the polymorphic
   3466 wrapper <code>std::function</code>.
   3467 </p>
   3468 </div>
   3469 
   3470 <div class="pros">
   3471 <ul>
   3472   <li>Lambdas are much more concise than other ways of
   3473    defining function objects to be passed to STL
   3474    algorithms, which can be a readability
   3475    improvement.</li>
   3476 
   3477   <li>Appropriate use of default captures can remove
   3478     redundancy and highlight important exceptions from
   3479     the default.</li>
   3480 
   3481    <li>Lambdas, <code>std::function</code>, and
   3482    <code>std::bind</code> can be used in combination as a
   3483    general purpose callback mechanism; they make it easy
   3484    to write functions that take bound functions as
   3485    arguments.</li>
   3486 </ul>
   3487 </div>
   3488 
   3489 <div class="cons">
   3490 <ul>
   3491   <li>Variable capture in lambdas can be a source of dangling-pointer
   3492   bugs, particularly if a lambda escapes the current scope.</li>
   3493 
   3494   <li>Default captures by value can be misleading because they do not prevent
   3495   dangling-pointer bugs. Capturing a pointer by value doesn't cause a deep
   3496   copy, so it often has the same lifetime issues as capture by reference.
   3497   This is especially confusing when capturing 'this' by value, since the use
   3498   of 'this' is often implicit.</li>
   3499 
   3500   <li>It's possible for use of lambdas to get out of
   3501   hand; very long nested anonymous functions can make
   3502   code harder to understand.</li>
   3503 
   3504 </ul>
   3505 </div>
   3506 
   3507 <div class="decision">
   3508 <ul>
   3509 <li>Use lambda expressions where appropriate, with formatting as
   3510 described <a href="#Formatting_Lambda_Expressions">below</a>.</li>
   3511 <li>Prefer explicit captures if the lambda may escape the current scope.
   3512 For example, instead of:
   3513 <pre class="badcode">{
   3514   Foo foo;
   3515   ...
   3516   executor-&gt;Schedule([&amp;] { Frobnicate(foo); })
   3517   ...
   3518 }
   3519 // BAD! The fact that the lambda makes use of a reference to `foo` and
   3520 // possibly `this` (if `Frobnicate` is a member function) may not be
   3521 // apparent on a cursory inspection. If the lambda is invoked after
   3522 // the function returns, that would be bad, because both `foo`
   3523 // and the enclosing object could have been destroyed.
   3524 </pre>
   3525 prefer to write:
   3526 <pre>{
   3527   Foo foo;
   3528   ...
   3529   executor-&gt;Schedule([&amp;foo] { Frobnicate(foo); })
   3530   ...
   3531 }
   3532 // BETTER - The compile will fail if `Frobnicate` is a member
   3533 // function, and it's clearer that `foo` is dangerously captured by
   3534 // reference.
   3535 </pre>
   3536 </li>
   3537 <li>Use default capture by reference ([&amp;]) only when the
   3538 lifetime of the lambda is obviously shorter than any potential
   3539 captures.
   3540 </li>
   3541 <li>Use default capture by value ([=]) only as a means of binding a
   3542 few variables for a short lambda, where the set of captured
   3543 variables is obvious at a glance. Prefer not to write long or
   3544 complex lambdas with default capture by value.
   3545 </li>
   3546 <li>Keep unnamed lambdas short.  If a lambda body is more than
   3547 maybe five lines long, prefer to give the lambda a name, or to
   3548 use a named function instead of a lambda.</li>
   3549 <li>Specify the return type of the lambda explicitly if that will
   3550 make it more obvious to readers, as with
   3551 <a href="#auto"><code>auto</code></a>.</li>
   3552 
   3553 </ul>
   3554 </div>
   3555 
   3556 </div> 
   3557 
   3558 <h3 id="Template_metaprogramming">Template metaprogramming</h3>
   3559 <div class="summary">
   3560 <p>Avoid complicated template programming.</p>
   3561 </div>
   3562 
   3563 <div class="stylebody">
   3564 
   3565 <div class="definition">
   3566 <p>Template metaprogramming refers to a family of techniques that
   3567 exploit the fact that the C++ template instantiation mechanism is
   3568 Turing complete and can be used to perform arbitrary compile-time
   3569 computation in the type domain.</p>
   3570 </div>
   3571 
   3572 <div class="pros">
   3573 <p>Template metaprogramming allows extremely flexible interfaces that
   3574 are type safe and high performance. Facilities like
   3575 
   3576 <a href="https://code.google.com/p/googletest/">Google Test</a>,
   3577 <code>std::tuple</code>, <code>std::function</code>, and
   3578 Boost.Spirit would be impossible without it.</p>
   3579 </div>
   3580 
   3581 <div class="cons">
   3582 <p>The techniques used in template metaprogramming are often obscure
   3583 to anyone but language experts. Code that uses templates in
   3584 complicated ways is often unreadable, and is hard to debug or
   3585 maintain.</p>
   3586 
   3587 <p>Template metaprogramming often leads to extremely poor compiler
   3588 time error messages: even if an interface is simple, the complicated
   3589 implementation details become visible when the user does something
   3590 wrong.</p>
   3591 
   3592 <p>Template metaprogramming interferes with large scale refactoring by
   3593 making the job of refactoring tools harder. First, the template code
   3594 is expanded in multiple contexts, and it's hard to verify that the
   3595 transformation makes sense in all of them. Second, some refactoring
   3596 tools work with an AST that only represents the structure of the code
   3597 after template expansion. It can be difficult to automatically work
   3598 back to the original source construct that needs to be
   3599 rewritten.</p>
   3600 </div>
   3601 
   3602 <div class="decision">
   3603 <p>Template metaprogramming sometimes allows cleaner and easier-to-use
   3604 interfaces than would be possible without it, but it's also often a
   3605 temptation to be overly clever. It's best used in a small number of
   3606 low level components where the extra maintenance burden is spread out
   3607 over a large number of uses.</p>
   3608 
   3609 <p>Think twice before using template metaprogramming or other
   3610 complicated template techniques; think about whether the average
   3611 member of your team will be able to understand your code well enough
   3612 to maintain it after you switch to another project, or whether a
   3613 non-C++ programmer or someone casually browsing the code base will be
   3614 able to understand the error messages or trace the flow of a function
   3615 they want to call.  If you're using recursive template instantiations
   3616 or type lists or metafunctions or expression templates, or relying on
   3617 SFINAE or on the <code>sizeof</code> trick for detecting function
   3618 overload resolution, then there's a good chance you've gone too
   3619 far.</p>
   3620 
   3621 <p>If you use template metaprogramming, you should expect to put
   3622 considerable effort into minimizing and isolating the complexity. You
   3623 should hide metaprogramming as an implementation detail whenever
   3624 possible, so that user-facing headers are readable, and you should
   3625 make sure that tricky code is especially well commented. You should
   3626 carefully document how the code is used, and you should say something
   3627 about what the "generated" code looks like. Pay extra attention to the
   3628 error messages that the compiler emits when users make mistakes.  The
   3629 error messages are part of your user interface, and your code should
   3630 be tweaked as necessary so that the error messages are understandable
   3631 and actionable from a user point of view.</p>
   3632 
   3633 </div> 
   3634 </div> 
   3635 
   3636 
   3637 <h3 id="Boost">Boost</h3>
   3638 
   3639 <div class="summary">
   3640 <p>Use only approved libraries from the Boost library
   3641 collection.</p>
   3642 </div>
   3643 
   3644 <div class="stylebody">
   3645 
   3646 <div class="definition">
   3647 <p> The
   3648 <a href="https://www.boost.org/">
   3649 Boost library collection</a> is a popular collection of
   3650 peer-reviewed, free, open-source C++ libraries.</p>
   3651 </div>
   3652 
   3653 <div class="pros">
   3654 <p>Boost code is generally very high-quality, is widely
   3655 portable, and fills many important gaps in the C++
   3656 standard library, such as type traits and better binders.</p>
   3657 </div>
   3658 
   3659 <div class="cons">
   3660 <p>Some Boost libraries encourage coding practices which can
   3661 hamper readability, such as metaprogramming and other
   3662 advanced template techniques, and an excessively
   3663 "functional" style of programming. </p>
   3664 </div>
   3665 
   3666 <div class="decision">
   3667 
   3668  
   3669 
   3670 <div>
   3671 <p>In order to maintain a high level of readability for
   3672 all contributors who might read and maintain code, we
   3673 only allow an approved subset of Boost features.
   3674 Currently, the following libraries are permitted:</p>
   3675 
   3676 <ul>
   3677   <li>
   3678   <a href="https://www.boost.org/libs/utility/call_traits.htm">
   3679   Call Traits</a> from <code>boost/call_traits.hpp</code></li>
   3680 
   3681   <li><a href="https://www.boost.org/libs/utility/compressed_pair.htm">
   3682   Compressed Pair</a> from  <code>boost/compressed_pair.hpp</code></li>
   3683 
   3684   <li><a href="https://www.boost.org/libs/graph/">
   3685   The Boost Graph Library (BGL)</a> from <code>boost/graph</code>,
   3686   except serialization (<code>adj_list_serialize.hpp</code>) and
   3687    parallel/distributed algorithms and data structures
   3688    (<code>boost/graph/parallel/*</code> and
   3689    <code>boost/graph/distributed/*</code>).</li>
   3690 
   3691   <li><a href="https://www.boost.org/libs/property_map/">
   3692   Property Map</a> from <code>boost/property_map</code>, except
   3693   parallel/distributed property maps (<code>boost/property_map/parallel/*</code>).</li>
   3694 
   3695   <li><a href="https://www.boost.org/libs/iterator/">
   3696   Iterator</a> from <code>boost/iterator</code></li>
   3697 
   3698   <li>The part of <a href="https://www.boost.org/libs/polygon/">
   3699   Polygon</a> that deals with Voronoi diagram
   3700   construction and doesn't depend on the rest of
   3701   Polygon:
   3702   <code>boost/polygon/voronoi_builder.hpp</code>,
   3703   <code>boost/polygon/voronoi_diagram.hpp</code>, and
   3704   <code>boost/polygon/voronoi_geometry_type.hpp</code></li>
   3705 
   3706   <li><a href="https://www.boost.org/libs/bimap/">
   3707   Bimap</a> from <code>boost/bimap</code></li>
   3708 
   3709   <li><a href="https://www.boost.org/libs/math/doc/html/dist.html">
   3710   Statistical Distributions and Functions</a> from
   3711   <code>boost/math/distributions</code></li>
   3712 
   3713   <li><a href="https://www.boost.org/libs/math/doc/html/special.html">
   3714   Special Functions</a> from <code>boost/math/special_functions</code></li>
   3715 
   3716   <li><a href="https://www.boost.org/libs/multi_index/">
   3717   Multi-index</a> from <code>boost/multi_index</code></li>
   3718 
   3719   <li><a href="https://www.boost.org/libs/heap/">
   3720   Heap</a> from <code>boost/heap</code></li>
   3721 
   3722   <li>The flat containers from
   3723   <a href="https://www.boost.org/libs/container/">Container</a>:
   3724   <code>boost/container/flat_map</code>, and
   3725   <code>boost/container/flat_set</code></li>
   3726 
   3727   <li><a href="https://www.boost.org/libs/intrusive/">Intrusive</a>
   3728   from <code>boost/intrusive</code>.</li>
   3729 
   3730   <li><a href="https://www.boost.org/libs/sort/">The
   3731   <code>boost/sort</code> library</a>.</li>
   3732 
   3733   <li><a href="https://www.boost.org/libs/preprocessor/">Preprocessor</a>
   3734   from <code>boost/preprocessor</code>.</li>
   3735 </ul>
   3736 
   3737 <p>We are actively considering adding other Boost
   3738 features to the list, so this list may be expanded in
   3739 the future.</p>
   3740 </div> 
   3741 
   3742 <p>The following libraries are permitted, but their use
   3743 is discouraged because they've been superseded by
   3744 standard libraries in C++11:</p>
   3745 
   3746 <ul>
   3747   <li><a href="https://www.boost.org/libs/array/">
   3748   Array</a> from <code>boost/array.hpp</code>: use
   3749   <a href="http://en.cppreference.com/w/cpp/container/array">
   3750    <code>std::array</code></a> instead.</li>
   3751 
   3752    <li><a href="https://www.boost.org/libs/ptr_container/">
   3753    Pointer Container</a> from <code>boost/ptr_container</code>: use containers of
   3754    <a href="http://en.cppreference.com/w/cpp/memory/unique_ptr">
   3755    <code>std::unique_ptr</code></a> instead.</li>
   3756 </ul>
   3757 </div> 
   3758 
   3759 </div> 
   3760 
   3761  
   3762 
   3763 <h3 id="std_hash">std::hash</h3>
   3764 
   3765 <div class="summary">
   3766 <p>Do not define specializations of <code>std::hash</code>.</p>
   3767 </div>
   3768 
   3769 <div class="stylebody">
   3770 
   3771 <div class="definition">
   3772 <p><code>std::hash&lt;T&gt;</code> is the function object that the
   3773 C++11 hash containers use to hash keys of type <code>T</code>,
   3774 unless the user explicitly specifies a different hash function. For
   3775 example, <code>std::unordered_map&lt;int, string&gt;</code> is a hash
   3776 map that uses <code>std::hash&lt;int&gt;</code> to hash its keys,
   3777 whereas <code>std::unordered_map&lt;int, string, MyIntHash&gt;</code>
   3778 uses <code>MyIntHash</code>.</p>
   3779 
   3780 <p><code>std::hash</code> is defined for all integral, floating-point,
   3781 pointer, and <code>enum</code> types, as well as some standard library
   3782 types such as <code>string</code> and <code>unique_ptr</code>. Users
   3783 can enable it to work for their own types by defining specializations
   3784 of it for those types.</p>
   3785 </div>
   3786 
   3787 <div class="pros">
   3788 <p><code>std::hash</code> is easy to use, and simplifies the code
   3789 since you don't have to name it explicitly. Specializing
   3790 <code>std::hash</code> is the standard way of specifying how to
   3791 hash a type, so it's what outside resources will teach, and what
   3792 new engineers will expect.</p>
   3793 </div>
   3794 
   3795 <div class="cons">
   3796 <p><code>std::hash</code> is hard to specialize. It requires a lot
   3797 of boilerplate code, and more importantly, it combines responsibility
   3798 for identifying the hash inputs with responsibility for executing the
   3799 hashing algorithm itself. The type author has to be responsible for
   3800 the former, but the latter requires expertise that a type author
   3801 usually doesn't have, and shouldn't need. The stakes here are high
   3802 because low-quality hash functions can be security vulnerabilities,
   3803 due to the emergence of
   3804 <a href="https://emboss.github.io/blog/2012/12/14/breaking-murmur-hash-flooding-dos-reloaded/">
   3805 hash flooding attacks</a>.</p>
   3806 
   3807 <p>Even for experts, <code>std::hash</code> specializations are
   3808 inordinately difficult to implement correctly for compound types,
   3809 because the implementation cannot recursively call <code>std::hash</code>
   3810 on data members. High-quality hash algorithms maintain large
   3811 amounts of internal state, and reducing that state to the
   3812 <code>size_t</code> bytes that <code>std::hash</code>
   3813 returns is usually the slowest part of the computation, so it
   3814 should not be done more than once.</p>
   3815 
   3816 <p>Due to exactly that issue, <code>std::hash</code> does not work
   3817 with <code>std::pair</code> or <code>std::tuple</code>, and the
   3818 language does not allow us to extend it to support them.</p>
   3819 </div>
   3820 
   3821 <div class="decision">
   3822 <p>You can use <code>std::hash</code> with the types that it supports
   3823 "out of the box", but do not specialize it to support additional types.
   3824 If you need a hash table with a key type that <code>std::hash</code>
   3825 does not support, consider using legacy hash containers (e.g.
   3826 <code>hash_map</code>) for now; they use a different default hasher,
   3827 which is unaffected by this prohibition.</p>
   3828 
   3829 <p>If you want to use the standard hash containers anyway, you will
   3830 need to specify a custom hasher for the key type, e.g.</p>
   3831 <pre>std::unordered_map&lt;MyKeyType, Value, MyKeyTypeHasher&gt; my_map;
   3832 </pre><p>
   3833 Consult with the type's owners to see if there is an existing hasher
   3834 that you can use; otherwise work with them to provide one,
   3835  or roll your own.</p>
   3836 
   3837 <p>We are planning to provide a hash function that can work with any type,
   3838 using a new customization mechanism that doesn't have the drawbacks of
   3839 <code>std::hash</code>.</p>
   3840 </div>
   3841 
   3842 </div>  
   3843 
   3844 <h3 id="C++11">C++11</h3>
   3845 
   3846 <div class="summary">
   3847 <p>Use libraries and language extensions from C++11 when appropriate.
   3848 Consider portability to other environments
   3849 before using C++11 features in your
   3850 project. </p>
   3851 
   3852 </div>
   3853 
   3854 <div class="stylebody">
   3855 
   3856 <div class="definition">
   3857 <p> C++11 contains <a href="https://en.wikipedia.org/wiki/C%2B%2B11">
   3858 significant changes</a> both to the language and
   3859 libraries. </p>
   3860 </div>
   3861 
   3862 <div class="pros">
   3863 <p>C++11 was the official standard until august 2014, and
   3864 is supported by most C++ compilers. It standardizes
   3865 some common C++ extensions that we use already, allows
   3866 shorthands for some operations, and has some performance
   3867 and safety improvements.</p>
   3868 </div>
   3869 
   3870 <div class="cons">
   3871 <p>The C++11 standard is substantially more complex than
   3872 its predecessor (1,300 pages versus 800 pages), and is
   3873 unfamiliar to many developers. The long-term effects of
   3874 some features on code readability and maintenance are
   3875 unknown. We cannot predict when its various features will
   3876 be implemented uniformly by tools that may be of
   3877 interest, particularly in the case of projects that are
   3878 forced to use older versions of tools.</p>
   3879 
   3880 <p>As with <a href="#Boost">Boost</a>, some C++11
   3881 extensions encourage coding practices that hamper
   3882 readability&#8212;for example by removing
   3883 checked redundancy (such as type names) that may be
   3884 helpful to readers, or by encouraging template
   3885 metaprogramming. Other extensions duplicate functionality
   3886 available through existing mechanisms, which may lead to confusion
   3887 and conversion costs.</p>
   3888 
   3889 
   3890 </div>
   3891 
   3892 <div class="decision">
   3893 
   3894 <p>C++11 features may be used unless specified otherwise.
   3895 In addition to what's described in the rest of the style
   3896 guide, the following C++11 features may not be used:</p>
   3897 
   3898 <ul>
   3899   
   3900 
   3901   
   3902 
   3903   
   3904 
   3905   
   3906 
   3907   <li>Compile-time rational numbers
   3908   (<code>&lt;ratio&gt;</code>), because of concerns that
   3909   it's tied to a more template-heavy interface
   3910   style.</li>
   3911 
   3912   <li>The <code>&lt;cfenv&gt;</code> and
   3913   <code>&lt;fenv.h&gt;</code> headers, because many
   3914   compilers do not support those features reliably.</li>
   3915 
   3916   <li>Ref-qualifiers on member functions, such as <code>void X::Foo()
   3917     &amp;</code> or <code>void X::Foo() &amp;&amp;</code>, because of concerns
   3918     that they're an overly obscure feature.</li>
   3919 
   3920   
   3921 
   3922   
   3923 </ul>
   3924 </div>
   3925 
   3926 </div> 
   3927 
   3928 <h3 id="Nonstandard_Extensions">Nonstandard Extensions</h3>
   3929 
   3930 <div class="summary">
   3931 <p>Nonstandard extensions to C++ may not be used unless otherwise specified.</p>
   3932 </div>
   3933 <div class="stylebody">
   3934 <div class="definition">
   3935 <p>Compilers support various extensions that are not part of standard C++. Such
   3936   extensions include GCC's <code>__attribute__</code>, intrinsic functions such
   3937   as <code>__builtin_prefetch</code>, designated initializers (e.g.
   3938   <code>Foo f = {.field = 3}</code>), inline assembly, <code>__COUNTER__</code>,
   3939   <code>__PRETTY_FUNCTION__</code>, compound statement expressions (e.g.
   3940   <code>foo = ({ int x; Bar(&amp;x); x })</code>, variable-length arrays and
   3941   <code>alloca()</code>, and the <code>a?:b</code> syntax.</p>
   3942 </div>
   3943 
   3944 <div class="pros">
   3945   <ul>
   3946     <li>Nonstandard extensions may provide useful features that do not exist
   3947       in standard C++. For example, some people think that designated
   3948       initializers are more readable than standard C++ features like
   3949       constructors.</li>
   3950     <li>Important performance guidance to the compiler can only be specified
   3951       using extensions.</li>
   3952   </ul>
   3953 </div>
   3954 
   3955 <div class="cons">
   3956   <ul>
   3957     <li>Nonstandard extensions do not work in all compilers. Use of nonstandard
   3958       extensions reduces portability of code.</li>
   3959     <li>Even if they are supported in all targeted compilers, the extensions
   3960       are often not well-specified, and there may be subtle behavior differences
   3961       between compilers.</li>
   3962     <li>Nonstandard extensions add to the language features that a reader must
   3963       know to understand the code.</li>
   3964   </ul>
   3965 </div>
   3966 
   3967 <div class="decision">
   3968 <p>Do not use nonstandard extensions. You may use portability wrappers that
   3969   are implemented using nonstandard extensions, so long as those wrappers
   3970   
   3971   are provided by a designated project-wide
   3972   portability header.</p>
   3973 </div>
   3974 </div> 
   3975 
   3976 <h3 id="Aliases">Aliases</h3>
   3977 
   3978 <div class="summary">
   3979 <p>Public aliases are for the benefit of an API's user, and should be clearly documented.</p>
   3980 </div>
   3981 <div class="stylebody">
   3982 <div class="definition">
   3983 <p>There are several ways to create names that are aliases of other entities:</p>
   3984 <pre>typedef Foo Bar;
   3985 using Bar = Foo;
   3986 using other_namespace::Foo;
   3987 </pre>
   3988 
   3989   <p>Like other declarations, aliases declared in a header file are part of that
   3990   header's public API unless they're in a function definition, in the private portion of a class,
   3991   or in an explicitly-marked internal namespace. Aliases in such areas or in .cc files are
   3992   implementation details (because client code can't refer to them), and are not restricted by this
   3993   rule.</p>
   3994 </div>
   3995 
   3996 <div class="pros">
   3997   <ul>
   3998     <li>Aliases can improve readability by simplifying a long or complicated name.</li>
   3999     <li>Aliases can reduce duplication by naming in one place a type used repeatedly in an API,
   4000       which <em>might</em> make it easier to change the type later.
   4001     </li>
   4002   </ul>
   4003 </div>
   4004 
   4005 <div class="cons">
   4006   <ul>
   4007     <li>When placed in a header where client code can refer to them, aliases increase the
   4008       number of entities in that header's API, increasing its complexity.</li>
   4009     <li>Clients can easily rely on unintended details of public aliases, making
   4010       changes difficult.</li>
   4011     <li>It can be tempting to create a public alias that is only intended for use
   4012       in the implementation, without considering its impact on the API, or on maintainability.</li>
   4013     <li>Aliases can create risk of name collisions</li>
   4014     <li>Aliases can reduce readability by giving a familiar construct an unfamiliar name</li>
   4015     <li>Type aliases can create an unclear API contract:
   4016       it is unclear whether the alias is guaranteed to be identical to the type it aliases,
   4017       to have the same API, or only to be usable in specified narrow ways</li>
   4018   </ul>
   4019 </div>
   4020 
   4021 <div class="decision">
   4022 <p>Don't put an alias in your public API just to save typing in the implementation;
   4023   do so only if you intend it to be used by your clients.</p>
   4024 <p>When defining a public alias, document the intent of
   4025 the new name, including whether it is guaranteed to always be the same as the type
   4026 it's currently aliased to, or whether a more limited compatibility is
   4027 intended. This lets the user know whether they can treat the types as
   4028 substitutable or whether more specific rules must be followed, and can help the
   4029 implementation retain some degree of freedom to change the alias.</p>
   4030 <p>Don't put namespace aliases in your public API. (See also <a href="#Namespaces">Namespaces</a>).
   4031 </p>
   4032 
   4033 <p>For example, these aliases document how they are intended to be used in client code:</p>
   4034 <pre>namespace a {
   4035 // Used to store field measurements. DataPoint may change from Bar* to some internal type.
   4036 // Client code should treat it as an opaque pointer.
   4037 using DataPoint = foo::bar::Bar*;
   4038 
   4039 // A set of measurements. Just an alias for user convenience.
   4040 using TimeSeries = std::unordered_set&lt;DataPoint, std::hash&lt;DataPoint&gt;, DataPointComparator&gt;;
   4041 }  // namespace a
   4042 </pre>
   4043 
   4044 <p>These aliases don't document intended use, and half of them aren't meant for client use:</p>
   4045 
   4046 <pre class="badcode">namespace a {
   4047 // Bad: none of these say how they should be used.
   4048 using DataPoint = foo::bar::Bar*;
   4049 using std::unordered_set;  // Bad: just for local convenience
   4050 using std::hash;           // Bad: just for local convenience
   4051 typedef unordered_set&lt;DataPoint, hash&lt;DataPoint&gt;, DataPointComparator&gt; TimeSeries;
   4052 }  // namespace a
   4053 </pre>
   4054 
   4055 <p>However, local convenience aliases are fine in function definitions, private sections of
   4056   classes, explicitly marked internal namespaces, and in .cc files:</p>
   4057 
   4058 <pre>// In a .cc file
   4059 using std::unordered_set;
   4060 </pre>
   4061 
   4062 </div>
   4063 </div> 
   4064 
   4065 <h2 id="Naming">Naming</h2>
   4066 
   4067 <p>The most important consistency rules are those that govern
   4068 naming. The style of a name immediately informs us what sort of
   4069 thing the named entity is: a type, a variable, a function, a
   4070 constant, a macro, etc., without requiring us to search for the
   4071 declaration of that entity. The pattern-matching engine in our
   4072 brains relies a great deal on these naming rules.
   4073 </p>
   4074 
   4075 <p>Naming rules are pretty arbitrary, but
   4076  we feel that
   4077 consistency is more important than individual preferences in this
   4078 area, so regardless of whether you find them sensible or not,
   4079 the rules are the rules.</p>
   4080 
   4081 <h3 id="General_Naming_Rules">General Naming Rules</h3>
   4082 
   4083 <div class="summary">
   4084 <p>Names should be descriptive; avoid abbreviation.</p>
   4085 </div>
   4086 
   4087 <div class="stylebody">
   4088 <p>Give as descriptive a name as possible, within reason.
   4089 Do not worry about saving horizontal space as it is far
   4090 more important to make your code immediately
   4091 understandable by a new reader. Do not use abbreviations
   4092 that are ambiguous or unfamiliar to readers outside your
   4093 project, and do not abbreviate by deleting letters within
   4094 a word.</p>
   4095 
   4096 <pre>int price_count_reader;    // No abbreviation.
   4097 int num_errors;            // "num" is a widespread convention.
   4098 int num_dns_connections;   // Most people know what "DNS" stands for.
   4099 </pre>
   4100 
   4101 <pre class="badcode">int n;                     // Meaningless.
   4102 int nerr;                  // Ambiguous abbreviation.
   4103 int n_comp_conns;          // Ambiguous abbreviation.
   4104 int wgc_connections;       // Only your group knows what this stands for.
   4105 int pc_reader;             // Lots of things can be abbreviated "pc".
   4106 int cstmr_id;              // Deletes internal letters.
   4107 </pre>
   4108 
   4109 <p>Note that certain universally-known abbreviations are OK, such as
   4110 <code>i</code> for an iteration variable and <code>T</code> for a
   4111 template parameter.</p>
   4112 
   4113 <p>Template parameters should follow the naming style for their
   4114 category: type template parameters should follow the rules for
   4115 <a href="#Type_Names">type names</a>, and non-type template
   4116 parameters should follow the rules for <a href="#Variable_Names">
   4117 variable names</a>.
   4118 
   4119 </p></div> 
   4120 
   4121 <h3 id="File_Names">File Names</h3>
   4122 
   4123 <div class="summary">
   4124 <p>Filenames should be all lowercase and can include
   4125 underscores (<code>_</code>) or dashes (<code>-</code>).
   4126 Follow the convention that your
   4127  
   4128 project uses. If there is no consistent
   4129 local pattern to follow, prefer "_".</p>
   4130 </div>
   4131 
   4132 <div class="stylebody">
   4133 
   4134 <p>Examples of acceptable file names:</p>
   4135 
   4136 <ul>
   4137   <li><code>my_useful_class.cc</code></li>
   4138   <li><code>my-useful-class.cc</code></li>
   4139   <li><code>myusefulclass.cc</code></li>
   4140   <li><code>myusefulclass_test.cc // _unittest and _regtest are deprecated.</code></li>
   4141 </ul>
   4142 
   4143 <p>C++ files should end in <code>.cc</code> and header files should end in
   4144 <code>.h</code>. Files that rely on being textually included at specific points
   4145 should end in <code>.inc</code> (see also the section on
   4146 <a href="#Self_contained_Headers">self-contained headers</a>).</p>
   4147 
   4148 <p>Do not use filenames that already exist in
   4149 <code>/usr/include</code>, such as <code>db.h</code>.</p>
   4150 
   4151 <p>In general, make your filenames very specific. For
   4152 example, use <code>http_server_logs.h</code> rather than
   4153 <code>logs.h</code>. A very common case is to have a pair
   4154 of files called, e.g., <code>foo_bar.h</code> and
   4155 <code>foo_bar.cc</code>, defining a class called
   4156 <code>FooBar</code>.</p>
   4157 
   4158 <p>Inline functions must be in a <code>.h</code> file. If
   4159 your inline functions are very short, they should go
   4160 directly into your <code>.h</code> file. </p>
   4161 
   4162 </div> 
   4163 
   4164 <h3 id="Type_Names">Type Names</h3>
   4165 
   4166 <div class="summary">
   4167 <p>Type names start with a capital letter and have a capital
   4168 letter for each new word, with no underscores:
   4169 <code>MyExcitingClass</code>, <code>MyExcitingEnum</code>.</p>
   4170 </div>
   4171 
   4172 <div class="stylebody">
   4173 
   4174 <p>The names of all types &#8212; classes, structs, type aliases,
   4175 enums, and type template parameters &#8212; have the same naming convention.
   4176 Type names should start with a capital letter and have a capital letter
   4177 for each new word. No underscores. For example:</p>
   4178 
   4179 <pre>// classes and structs
   4180 class UrlTable { ...
   4181 class UrlTableTester { ...
   4182 struct UrlTableProperties { ...
   4183 
   4184 // typedefs
   4185 typedef hash_map&lt;UrlTableProperties *, string&gt; PropertiesMap;
   4186 
   4187 // using aliases
   4188 using PropertiesMap = hash_map&lt;UrlTableProperties *, string&gt;;
   4189 
   4190 // enums
   4191 enum UrlTableErrors { ...
   4192 </pre>
   4193 
   4194 </div> 
   4195 
   4196 <h3 id="Variable_Names">Variable Names</h3>
   4197 
   4198 <div class="summary">
   4199 <p>The names of variables (including function parameters) and data members are
   4200 all lowercase, with underscores between words. Data members of classes (but not
   4201 structs) additionally have trailing underscores. For instance:
   4202 <code>a_local_variable</code>, <code>a_struct_data_member</code>,
   4203 <code>a_class_data_member_</code>.</p>
   4204 </div>
   4205 
   4206 <div class="stylebody">
   4207 
   4208 <h4 class="stylepoint_subsection">Common Variable names</h4>
   4209 
   4210 <p>For example:</p>
   4211 
   4212 <pre>string table_name;  // OK - uses underscore.
   4213 string tablename;   // OK - all lowercase.
   4214 </pre>
   4215 
   4216 <pre class="badcode">string tableName;   // Bad - mixed case.
   4217 </pre>
   4218 
   4219 <h4 class="stylepoint_subsection">Class Data Members</h4>
   4220 
   4221 <p>Data members of classes, both static and non-static, are
   4222 named like ordinary nonmember variables, but with a
   4223 trailing underscore.</p>
   4224 
   4225 <pre>class TableInfo {
   4226   ...
   4227  private:
   4228   string table_name_;  // OK - underscore at end.
   4229   string tablename_;   // OK.
   4230   static Pool&lt;TableInfo&gt;* pool_;  // OK.
   4231 };
   4232 </pre>
   4233 
   4234 <h4 class="stylepoint_subsection">Struct Data Members</h4>
   4235 
   4236 <p>Data members of structs, both static and non-static,
   4237 are named like ordinary nonmember variables. They do not have
   4238 the trailing underscores that data members in classes have.</p>
   4239 
   4240 <pre>struct UrlTableProperties {
   4241   string name;
   4242   int num_entries;
   4243   static Pool&lt;UrlTableProperties&gt;* pool;
   4244 };
   4245 </pre>
   4246 
   4247 
   4248 <p>See <a href="#Structs_vs._Classes">Structs vs.
   4249 Classes</a> for a discussion of when to use a struct
   4250 versus a class.</p>
   4251 
   4252 </div> 
   4253 
   4254 <h3 id="Constant_Names">Constant Names</h3>
   4255 
   4256 <div class="summary">
   4257   <p>Variables declared constexpr or const, and whose value is fixed for
   4258   the duration of the program, are named with a leading "k" followed
   4259   by mixed case.  For example:</p>
   4260 </div>
   4261 
   4262 <pre>const int kDaysInAWeek = 7;
   4263 </pre>
   4264 
   4265 <div class="stylebody">
   4266 
   4267   <p>All such variables with static storage duration (i.e. statics and globals,
   4268   see <a href="http://en.cppreference.com/w/cpp/language/storage_duration#Storage_duration">
   4269     Storage Duration</a> for details) should be named this way.  This
   4270   convention is optional for variables of other storage classes, e.g. automatic
   4271   variables, otherwise the usual variable naming rules apply.</p><p>
   4272 
   4273 </p></div> 
   4274 
   4275 <h3 id="Function_Names">Function Names</h3>
   4276 
   4277 <div class="summary">
   4278 <p>Regular functions have mixed case; accessors and mutators may be named
   4279 like variables.</p>
   4280 </div>
   4281 
   4282 <div class="stylebody">
   4283 
   4284 <p>Ordinarily, functions should start with a capital letter and have a
   4285 capital letter for each new word
   4286 (a.k.a. "<a href="https://en.wikipedia.org/wiki/Camel_case">Camel
   4287 Case</a>" or "Pascal case"). Such names should not have
   4288 underscores. Prefer to capitalize acronyms as single words
   4289 (i.e. <code>StartRpc()</code>, not <code>StartRPC()</code>).</p>
   4290 
   4291 <pre>AddTableEntry()
   4292 DeleteUrl()
   4293 OpenFileOrDie()
   4294 </pre>
   4295 
   4296 <p>(The same naming rule applies to class- and namespace-scope
   4297 constants that are exposed as part of an API and that are intended to look
   4298 like functions, because the fact that they're
   4299 objects rather than functions is an unimportant implementation detail.)</p>
   4300 
   4301 <p>Accessors and mutators (get and set functions) may be named like
   4302 variables. These often correspond to actual member variables, but this is
   4303 not required. For example, <code>int count()</code> and <code>void
   4304 set_count(int count)</code>.</p>
   4305 
   4306 </div> 
   4307 
   4308 <h3 id="Namespace_Names">Namespace Names</h3>
   4309 
   4310 <div class="summary">
   4311 Namespace names are all lower-case. Top-level namespace names are
   4312 based on the project name
   4313 . Avoid collisions
   4314 between nested namespaces and well-known top-level namespaces.
   4315 </div>
   4316 
   4317 <div class="stylebody">
   4318 <p>The name of a top-level namespace should usually be the
   4319 name of the project or team whose code is contained in that
   4320 namespace. The code in that namespace should usually be in
   4321 a directory whose basename matches the namespace name (or
   4322 subdirectories thereof).</p>
   4323 
   4324 
   4325 
   4326 
   4327 
   4328 <p>Keep in mind that the <a href="#General_Naming_Rules">rule
   4329 against abbreviated names</a> applies to namespaces just as much
   4330 as variable names. Code inside the namespace seldom needs to
   4331 mention the namespace name, so there's usually no particular need
   4332 for abbreviation anyway.</p>
   4333 
   4334 <p>Avoid nested namespaces that match well-known top-level
   4335 namespaces. Collisions between namespace names can lead to surprising
   4336 build breaks because of name lookup rules. In particular, do not
   4337 create any nested <code>std</code> namespaces. Prefer unique project
   4338 identifiers
   4339 (<code>websearch::index</code>, <code>websearch::index_util</code>)
   4340 over collision-prone names like <code>websearch::util</code>.</p>
   4341 
   4342 <p>For <code>internal</code> namespaces, be wary of other code being
   4343 added to the same <code>internal</code> namespace causing a collision
   4344 (internal helpers within a team tend to be related and may lead to
   4345 collisions). In such a situation, using the filename to make a unique
   4346 internal name is helpful
   4347 (<code>websearch::index::frobber_internal</code> for use
   4348 in <code>frobber.h</code>)</p>
   4349 
   4350 </div> 
   4351 
   4352 <h3 id="Enumerator_Names">Enumerator Names</h3>
   4353 
   4354 <div class="summary">
   4355 <p>Enumerators (for both scoped and unscoped enums) should be named <i>either</i> like
   4356 <a href="#Constant_Names">constants</a> or like
   4357 <a href="#Macro_Names">macros</a>: either <code>kEnumName</code> or
   4358 <code>ENUM_NAME</code>.</p>
   4359 </div>
   4360 
   4361 <div class="stylebody">
   4362 
   4363 <p>Preferably, the individual enumerators should be named
   4364 like <a href="#Constant_Names">constants</a>. However, it
   4365 is also acceptable to name them like
   4366 <a href="#Macro_Names">macros</a>.  The enumeration name,
   4367 <code>UrlTableErrors</code> (and
   4368 <code>AlternateUrlTableErrors</code>), is a type, and
   4369 therefore mixed case.</p>
   4370 
   4371 <pre>enum UrlTableErrors {
   4372   kOK = 0,
   4373   kErrorOutOfMemory,
   4374   kErrorMalformedInput,
   4375 };
   4376 enum AlternateUrlTableErrors {
   4377   OK = 0,
   4378   OUT_OF_MEMORY = 1,
   4379   MALFORMED_INPUT = 2,
   4380 };
   4381 </pre>
   4382 
   4383 <p>Until January 2009, the style was to name enum values
   4384 like <a href="#Macro_Names">macros</a>. This caused
   4385 problems with name collisions between enum values and
   4386 macros. Hence, the change to prefer constant-style naming
   4387 was put in place. New code should prefer constant-style
   4388 naming if possible. However, there is no reason to change
   4389 old code to use constant-style names, unless the old
   4390 names are actually causing a compile-time problem.</p>
   4391 
   4392 
   4393 
   4394 </div> 
   4395 
   4396 <h3 id="Macro_Names">Macro Names</h3>
   4397 
   4398 <div class="summary">
   4399 <p>You're not really going to <a href="#Preprocessor_Macros">
   4400 define a macro</a>, are you? If you do, they're like this:
   4401 <code>MY_MACRO_THAT_SCARES_SMALL_CHILDREN</code>.</p>
   4402 </div>
   4403 
   4404 <div class="stylebody">
   4405 
   4406 <p>Please see the <a href="#Preprocessor_Macros">description
   4407 of macros</a>; in general macros should <em>not</em> be used.
   4408 However, if they are absolutely needed, then they should be
   4409 named with all capitals and underscores.</p>
   4410 
   4411 <pre>#define ROUND(x) ...
   4412 #define PI_ROUNDED 3.0
   4413 </pre>
   4414 
   4415 </div> 
   4416 
   4417 <h3 id="Exceptions_to_Naming_Rules">Exceptions to Naming Rules</h3>
   4418 
   4419 <div class="summary">
   4420 <p>If you are naming something that is analogous to an
   4421 existing C or C++ entity then you can follow the existing
   4422 naming convention scheme.</p>
   4423 </div>
   4424 
   4425 <div class="stylebody">
   4426 
   4427 <dl>
   4428   <dt><code>bigopen()</code></dt>
   4429   <dd>function name, follows form of <code>open()</code></dd>
   4430 
   4431   <dt><code>uint</code></dt>
   4432   <dd><code>typedef</code></dd>
   4433 
   4434   <dt><code>bigpos</code></dt>
   4435   <dd><code>struct</code> or <code>class</code>, follows
   4436   form of <code>pos</code></dd>
   4437 
   4438   <dt><code>sparse_hash_map</code></dt>
   4439   <dd>STL-like entity; follows STL naming conventions</dd>
   4440 
   4441   <dt><code>LONGLONG_MAX</code></dt>
   4442   <dd>a constant, as in <code>INT_MAX</code></dd>
   4443 </dl>
   4444 
   4445 </div> 
   4446 
   4447 <h2 id="Comments">Comments</h2>
   4448 
   4449 <p>Though a pain to write, comments are absolutely vital to
   4450 keeping our code readable. The following rules describe what
   4451 you should comment and where. But remember: while comments are
   4452 very important, the best code is self-documenting. Giving
   4453 sensible names to types and variables is much better than using
   4454 obscure names that you must then explain through comments.</p>
   4455 
   4456 <p>When writing your comments, write for your audience: the
   4457 next 
   4458 contributor who will need to
   4459 understand your code. Be generous &#8212; the next
   4460 one may be you!</p>
   4461 
   4462 <h3 id="Comment_Style">Comment Style</h3>
   4463 
   4464 <div class="summary">
   4465 <p>Use either the <code>//</code> or <code>/* */</code>
   4466 syntax, as long as you are consistent.</p>
   4467 </div>
   4468 
   4469 <div class="stylebody">
   4470 
   4471 <p>You can use either the <code>//</code> or the <code>/*
   4472 */</code> syntax; however, <code>//</code> is
   4473 <em>much</em> more common. Be consistent with how you
   4474 comment and what style you use where.</p>
   4475 
   4476 </div> 
   4477 
   4478 <h3 id="File_Comments">File Comments</h3>
   4479 
   4480 <div class="summary">
   4481 <p>Start each file with license boilerplate.</p>
   4482 
   4483 <p>File comments describe the contents of a file. If a file declares,
   4484 implements, or tests exactly one abstraction that is documented by a comment
   4485 at the point of declaration, file comments are not required. All other files
   4486 must have file comments.</p>
   4487 
   4488 </div>
   4489 
   4490 <div class="stylebody">
   4491 
   4492 <h4 class="stylepoint_subsection">Legal Notice and Author
   4493 Line</h4>
   4494 
   4495 
   4496 
   4497 <p>Every file should contain license
   4498 boilerplate. Choose the appropriate boilerplate for the
   4499 license used by the project (for example, Apache 2.0,
   4500 BSD, LGPL, GPL).</p>
   4501 
   4502 <p>If you make significant changes to a file with an
   4503 author line, consider deleting the author line.</p>
   4504 
   4505 <h4 class="stylepoint_subsection">File Contents</h4>
   4506 
   4507 <p>If a <code>.h</code> declares multiple abstractions, the file-level comment
   4508 should broadly describe the contents of the file, and how the abstractions are
   4509 related. A 1 or 2 sentence file-level comment may be sufficient. The detailed
   4510 documentation about individual abstractions belongs with those abstractions,
   4511 not at the file level.</p>
   4512 
   4513 <p>Do not duplicate comments in both the <code>.h</code> and the
   4514 <code>.cc</code>. Duplicated comments diverge.</p>
   4515 
   4516 </div> 
   4517 
   4518 <h3 id="Class_Comments">Class Comments</h3>
   4519 
   4520 <div class="summary">
   4521 <p>Every non-obvious class declaration should have an accompanying
   4522 comment that describes what it is for and how it should be used.</p>
   4523 </div>
   4524 
   4525 <div class="stylebody">
   4526 
   4527 <pre>// Iterates over the contents of a GargantuanTable.
   4528 // Example:
   4529 //    GargantuanTableIterator* iter = table-&gt;NewIterator();
   4530 //    for (iter-&gt;Seek("foo"); !iter-&gt;done(); iter-&gt;Next()) {
   4531 //      process(iter-&gt;key(), iter-&gt;value());
   4532 //    }
   4533 //    delete iter;
   4534 class GargantuanTableIterator {
   4535   ...
   4536 };
   4537 </pre>
   4538 
   4539 <p>The class comment should provide the reader with enough information to know
   4540 how and when to use the class, as well as any additional considerations
   4541 necessary to correctly use the class. Document the synchronization assumptions
   4542 the class makes, if any. If an instance of the class can be accessed by
   4543 multiple threads, take extra care to document the rules and invariants
   4544 surrounding multithreaded use.</p>
   4545 
   4546 <p>The class comment is often a good place for a small example code snippet
   4547 demonstrating a simple and focused usage of the class.</p>
   4548 
   4549 <p>When sufficiently separated (e.g. <code>.h</code> and <code>.cc</code>
   4550 files), comments describing the use of the class should go together with its
   4551 interface definition; comments about the class operation and implementation
   4552 should accompany the implementation of the class's methods.</p>
   4553 
   4554 </div> 
   4555 
   4556 <h3 id="Function_Comments">Function Comments</h3>
   4557 
   4558 <div class="summary">
   4559 <p>Declaration comments describe use of the function (when it is
   4560 non-obvious); comments at the definition of a function describe
   4561 operation.</p>
   4562 </div>
   4563 
   4564 <div class="stylebody">
   4565 
   4566 <h4 class="stylepoint_subsection">Function Declarations</h4>
   4567 
   4568 <p>Almost every function declaration should have comments immediately
   4569 preceding it that describe what the function does and how to use
   4570 it. These comments may be omitted only if the function is simple and
   4571 obvious (e.g. simple accessors for obvious properties of the
   4572 class).  These comments should be descriptive ("Opens the file")
   4573 rather than imperative ("Open the file"); the comment describes the
   4574 function, it does not tell the function what to do. In general, these
   4575 comments do not describe how the function performs its task. Instead,
   4576 that should be left to comments in the function definition.</p>
   4577 
   4578 <p>Types of things to mention in comments at the function
   4579 declaration:</p>
   4580 
   4581 <ul>
   4582   <li>What the inputs and outputs are.</li>
   4583 
   4584   <li>For class member functions: whether the object
   4585   remembers reference arguments beyond the duration of
   4586   the method call, and whether it will free them or
   4587   not.</li>
   4588 
   4589   <li>If the function allocates memory that the caller
   4590   must free.</li>
   4591 
   4592   <li>Whether any of the arguments can be a null
   4593   pointer.</li>
   4594 
   4595   <li>If there are any performance implications of how a
   4596   function is used.</li>
   4597 
   4598   <li>If the function is re-entrant. What are its
   4599   synchronization assumptions?</li>
   4600  </ul>
   4601 
   4602 <p>Here is an example:</p>
   4603 
   4604 <pre>// Returns an iterator for this table.  It is the client's
   4605 // responsibility to delete the iterator when it is done with it,
   4606 // and it must not use the iterator once the GargantuanTable object
   4607 // on which the iterator was created has been deleted.
   4608 //
   4609 // The iterator is initially positioned at the beginning of the table.
   4610 //
   4611 // This method is equivalent to:
   4612 //    Iterator* iter = table-&gt;NewIterator();
   4613 //    iter-&gt;Seek("");
   4614 //    return iter;
   4615 // If you are going to immediately seek to another place in the
   4616 // returned iterator, it will be faster to use NewIterator()
   4617 // and avoid the extra seek.
   4618 Iterator* GetIterator() const;
   4619 </pre>
   4620 
   4621 <p>However, do not be unnecessarily verbose or state the
   4622 completely obvious. Notice below that it is not necessary
   4623  to say "returns false otherwise" because this is
   4624 implied.</p>
   4625 
   4626 <pre>// Returns true if the table cannot hold any more entries.
   4627 bool IsTableFull();
   4628 </pre>
   4629 
   4630 <p>When documenting function overrides, focus on the
   4631 specifics of the override itself, rather than repeating
   4632 the comment from the overridden function.  In many of these
   4633 cases, the override needs no additional documentation and
   4634 thus no comment is required.</p>
   4635 
   4636 <p>When commenting constructors and destructors, remember
   4637 that the person reading your code knows what constructors
   4638 and destructors are for, so comments that just say
   4639 something like "destroys this object" are not useful.
   4640 Document what constructors do with their arguments (for
   4641 example, if they take ownership of pointers), and what
   4642 cleanup the destructor does. If this is trivial, just
   4643 skip the comment. It is quite common for destructors not
   4644 to have a header comment.</p>
   4645 
   4646 <h4 class="stylepoint_subsection">Function Definitions</h4>
   4647 
   4648 <p>If there is anything tricky about how a function does
   4649 its job, the function definition should have an
   4650 explanatory comment. For example, in the definition
   4651 comment you might describe any coding tricks you use,
   4652 give an overview of the steps you go through, or explain
   4653 why you chose to implement the function in the way you
   4654 did rather than using a viable alternative. For instance,
   4655 you might mention why it must acquire a lock for the
   4656 first half of the function but why it is not needed for
   4657 the second half.</p>
   4658 
   4659 <p>Note you should <em>not</em> just repeat the comments
   4660 given with the function declaration, in the
   4661 <code>.h</code> file or wherever. It's okay to
   4662 recapitulate briefly what the function does, but the
   4663 focus of the comments should be on how it does it.</p>
   4664 
   4665 </div> 
   4666 
   4667 <h3 id="Variable_Comments">Variable Comments</h3>
   4668 
   4669 <div class="summary">
   4670 <p>In general the actual name of the variable should be
   4671 descriptive enough to give a good idea of what the variable
   4672 is used for. In certain cases, more comments are required.</p>
   4673 </div>
   4674 
   4675 <div class="stylebody">
   4676 
   4677 <h4 class="stylepoint_subsection">Class Data Members</h4>
   4678 
   4679 <p>The purpose of each class data member (also called an instance
   4680 variable or member variable) must be clear. If there are any
   4681 invariants (special values, relationships between members, lifetime
   4682 requirements) not clearly expressed by the type and name, they must be
   4683 commented. However, if the type and name suffice (<code>int
   4684 num_events_;</code>), no comment is needed.</p>
   4685 
   4686 <p>In particular, add comments to describe the existence and meaning
   4687 of sentinel values, such as nullptr or -1, when they are not
   4688 obvious. For example:</p>
   4689 
   4690 <pre>private:
   4691  // Used to bounds-check table accesses. -1 means
   4692  // that we don't yet know how many entries the table has.
   4693  int num_total_entries_;
   4694 </pre>
   4695 
   4696 <h4 class="stylepoint_subsection">Global Variables</h4>
   4697 
   4698 <p>All global variables should have a comment describing what they
   4699 are, what they are used for, and (if unclear) why it needs to be
   4700 global. For example:</p>
   4701 
   4702 <pre>// The total number of tests cases that we run through in this regression test.
   4703 const int kNumTestCases = 6;
   4704 </pre>
   4705 
   4706 </div> 
   4707 
   4708 <h3 id="Implementation_Comments">Implementation Comments</h3>
   4709 
   4710 <div class="summary">
   4711 <p>In your implementation you should have comments in tricky,
   4712 non-obvious, interesting, or important parts of your code.</p>
   4713 </div>
   4714 
   4715 <div class="stylebody">
   4716 
   4717 <h4 class="stylepoint_subsection">Explanatory Comments</h4>
   4718 
   4719 <p>Tricky or complicated code blocks should have comments
   4720 before them. Example:</p>
   4721 
   4722 <pre>// Divide result by two, taking into account that x
   4723 // contains the carry from the add.
   4724 for (int i = 0; i &lt; result-&gt;size(); i++) {
   4725   x = (x &lt;&lt; 8) + (*result)[i];
   4726   (*result)[i] = x &gt;&gt; 1;
   4727   x &amp;= 1;
   4728 }
   4729 </pre>
   4730 
   4731 <h4 class="stylepoint_subsection">Line Comments</h4>
   4732 
   4733 <p>Also, lines that are non-obvious should get a comment
   4734 at the end of the line. These end-of-line comments should
   4735 be separated from the code by 2 spaces. Example:</p>
   4736 
   4737 <pre>// If we have enough memory, mmap the data portion too.
   4738 mmap_budget = max&lt;int64&gt;(0, mmap_budget - index_-&gt;length());
   4739 if (mmap_budget &gt;= data_size_ &amp;&amp; !MmapData(mmap_chunk_bytes, mlock))
   4740   return;  // Error already logged.
   4741 </pre>
   4742 
   4743 <p>Note that there are both comments that describe what
   4744 the code is doing, and comments that mention that an
   4745 error has already been logged when the function
   4746 returns.</p>
   4747 
   4748 <p>If you have several comments on subsequent lines, it
   4749 can often be more readable to line them up:</p>
   4750 
   4751 <pre>DoSomething();                  // Comment here so the comments line up.
   4752 DoSomethingElseThatIsLonger();  // Two spaces between the code and the comment.
   4753 { // One space before comment when opening a new scope is allowed,
   4754   // thus the comment lines up with the following comments and code.
   4755   DoSomethingElse();  // Two spaces before line comments normally.
   4756 }
   4757 std::vector&lt;string&gt; list{
   4758                     // Comments in braced lists describe the next element...
   4759                     "First item",
   4760                     // .. and should be aligned appropriately.
   4761                     "Second item"};
   4762 DoSomething(); /* For trailing block comments, one space is fine. */
   4763 </pre>
   4764 
   4765 <h4 class="stylepoint_subsection">Function Argument Comments</h4>
   4766 
   4767 <p>When the meaning of a function argument is nonobvious, consider
   4768 one of the following remedies:</p>
   4769 
   4770 <ul>
   4771   <li>If the argument is a literal constant, and the same constant is
   4772   used in multiple function calls in a way that tacitly assumes they're
   4773   the same, you should use a named constant to make that constraint
   4774   explicit, and to guarantee that it holds.</li>
   4775 
   4776   <li>Consider changing the function signature to replace a <code>bool</code>
   4777   argument with an <code>enum</code> argument. This will make the argument
   4778   values self-describing.</li>
   4779 
   4780   <li>For functions that have several configuration options, consider
   4781   defining a single class or struct to hold all the options
   4782   ,
   4783   and pass an instance of that.
   4784   This approach has several advantages. Options are referenced by name
   4785   at the call site, which clarifies their meaning. It also reduces
   4786   function argument count, which makes function calls easier to read and
   4787   write. As an added benefit, you don't have to change call sites when
   4788   you add another option.
   4789   </li>
   4790 
   4791   <li>Replace large or complex nested expressions with named variables.</li>
   4792 
   4793   <li>As a last resort, use comments to clarify argument meanings at the
   4794   call site.</li>
   4795 </ul>
   4796 
   4797 Consider the following example:
   4798 
   4799 <pre class="badcode">// What are these arguments?
   4800 const DecimalNumber product = CalculateProduct(values, 7, false, nullptr);
   4801 </pre>
   4802 
   4803 <p>versus:</p>
   4804 
   4805 <pre>ProductOptions options;
   4806 options.set_precision_decimals(7);
   4807 options.set_use_cache(ProductOptions::kDontUseCache);
   4808 const DecimalNumber product =
   4809     CalculateProduct(values, options, /*completion_callback=*/nullptr);
   4810 </pre>
   4811 
   4812 <h4 class="stylepoint_subsection">Don'ts</h4>
   4813 
   4814 <p>Do not state the obvious. In particular, don't literally describe what
   4815 code does, unless the behavior is nonobvious to a reader who understands
   4816 C++ well. Instead, provide higher level comments that describe <i>why</i>
   4817 the code does what it does, or make the code self describing.</p>
   4818 
   4819 Compare this:
   4820 
   4821 <pre class="badcode">// Find the element in the vector.  &lt;-- Bad: obvious!
   4822 auto iter = std::find(v.begin(), v.end(), element);
   4823 if (iter != v.end()) {
   4824   Process(element);
   4825 }
   4826 </pre>
   4827 
   4828 To this:
   4829 
   4830 <pre>// Process "element" unless it was already processed.
   4831 auto iter = std::find(v.begin(), v.end(), element);
   4832 if (iter != v.end()) {
   4833   Process(element);
   4834 }
   4835 </pre>
   4836 
   4837 Self-describing code doesn't need a comment. The comment from
   4838 the example above would be obvious:
   4839 
   4840 <pre>if (!IsAlreadyProcessed(element)) {
   4841   Process(element);
   4842 }
   4843 </pre>
   4844 
   4845 </div> 
   4846 
   4847 <h3 id="Punctuation,_Spelling_and_Grammar">Punctuation, Spelling and Grammar</h3>
   4848 
   4849 <div class="summary">
   4850 <p>Pay attention to punctuation, spelling, and grammar; it is
   4851 easier to read well-written comments than badly written
   4852 ones.</p>
   4853 </div>
   4854 
   4855 <div class="stylebody">
   4856 
   4857 <p>Comments should be as readable as narrative text, with
   4858 proper capitalization and punctuation. In many cases,
   4859 complete sentences are more readable than sentence
   4860 fragments. Shorter comments, such as comments at the end
   4861 of a line of code, can sometimes be less formal, but you
   4862 should be consistent with your style.</p>
   4863 
   4864 <p>Although it can be frustrating to have a code reviewer
   4865 point out that you are using a comma when you should be
   4866 using a semicolon, it is very important that source code
   4867 maintain a high level of clarity and readability. Proper
   4868 punctuation, spelling, and grammar help with that
   4869 goal.</p>
   4870 
   4871 </div> 
   4872 
   4873 <h3 id="TODO_Comments">TODO Comments</h3>
   4874 
   4875 <div class="summary">
   4876 <p>Use <code>TODO</code> comments for code that is temporary,
   4877 a short-term solution, or good-enough but not perfect.</p>
   4878 </div>
   4879 
   4880 <div class="stylebody">
   4881 
   4882 <p><code>TODO</code>s should include the string
   4883 <code>TODO</code> in all caps, followed by the
   4884 
   4885 name, e-mail address, bug ID, or other
   4886 identifier
   4887 of the person or issue with the best context
   4888 about the problem referenced by the <code>TODO</code>. The
   4889 main purpose is to have a consistent <code>TODO</code> that
   4890 can be searched to find out how to get more details upon
   4891 request. A <code>TODO</code> is not a commitment that the
   4892 person referenced will fix the problem. Thus when you create
   4893 a <code>TODO</code> with a name, it is almost always your
   4894 name that is given.</p>
   4895 
   4896 
   4897 
   4898 <div>
   4899 <pre>// TODO(kl (a] gmail.com): Use a "*" here for concatenation operator.
   4900 // TODO(Zeke) change this to use relations.
   4901 // TODO(bug 12345): remove the "Last visitors" feature
   4902 </pre>
   4903 </div>
   4904 
   4905 <p>If your <code>TODO</code> is of the form "At a future
   4906 date do something" make sure that you either include a
   4907 very specific date ("Fix by November 2005") or a very
   4908 specific event ("Remove this code when all clients can
   4909 handle XML responses.").</p>
   4910 
   4911 </div> 
   4912 
   4913 <h3 id="Deprecation_Comments">Deprecation Comments</h3>
   4914 
   4915 <div class="summary">
   4916 <p>Mark deprecated interface points with <code>DEPRECATED</code>
   4917 comments.</p>
   4918 </div>
   4919 
   4920 <div class="stylebody">
   4921 
   4922 <p>You can mark an interface as deprecated by writing a
   4923 comment containing the word <code>DEPRECATED</code> in
   4924 all caps. The comment goes either before the declaration
   4925 of the interface or on the same line as the
   4926 declaration.</p>
   4927 
   4928 
   4929 
   4930 <p>After the word
   4931 <code>DEPRECATED</code>, write your name, e-mail address,
   4932 or other identifier in parentheses.</p>
   4933 
   4934 <p>A deprecation comment must include simple, clear
   4935 directions for people to fix their callsites. In C++, you
   4936 can implement a deprecated function as an inline function
   4937 that calls the new interface point.</p>
   4938 
   4939 <p>Marking an interface point <code>DEPRECATED</code>
   4940 will not magically cause any callsites to change. If you
   4941 want people to actually stop using the deprecated
   4942 facility, you will have to fix the callsites yourself or
   4943 recruit a crew to help you.</p>
   4944 
   4945 <p>New code should not contain calls to deprecated
   4946 interface points. Use the new interface point instead. If
   4947 you cannot understand the directions, find the person who
   4948 created the deprecation and ask them for help using the
   4949 new interface point.</p>
   4950 
   4951 
   4952 
   4953 </div> 
   4954 
   4955 <h2 id="Formatting">Formatting</h2>
   4956 
   4957 <p>Coding style and formatting are pretty arbitrary, but a
   4958 
   4959 project is much easier to follow
   4960 if everyone uses the same style. Individuals may not agree with every
   4961 aspect of the formatting rules, and some of the rules may take
   4962 some getting used to, but it is important that all
   4963 
   4964 project contributors follow the
   4965 style rules so that 
   4966 they can all read and understand
   4967 everyone's code easily.</p>
   4968 
   4969 
   4970 
   4971 <p>To help you format code correctly, we've
   4972 created a
   4973 <a href="https://raw.githubusercontent.com/google/styleguide/gh-pages/google-c-style.el">
   4974 settings file for emacs</a>.</p>
   4975 
   4976 <h3 id="Line_Length">Line Length</h3>
   4977 
   4978 <div class="summary">
   4979 <p>Each line of text in your code should be at most 80
   4980 characters long.</p>
   4981 </div>
   4982 
   4983 <div class="stylebody">
   4984 
   4985 
   4986 
   4987  <p>We recognize that this rule is
   4988 controversial, but so much existing code already adheres
   4989 to it, and we feel that consistency is important.</p>
   4990 
   4991 <div class="pros">
   4992 <p>Those who favor  this rule
   4993 argue that it is rude to force them to resize
   4994 their windows and there is no need for anything longer.
   4995 Some folks are used to having several code windows
   4996 side-by-side, and thus don't have room to widen their
   4997 windows in any case. People set up their work environment
   4998 assuming a particular maximum window width, and 80
   4999 columns has been the traditional standard. Why change
   5000 it?</p>
   5001 </div>
   5002 
   5003 <div class="cons">
   5004 <p>Proponents of change argue that a wider line can make
   5005 code more readable. The 80-column limit is an hidebound
   5006 throwback to 1960s mainframes;  modern equipment has wide screens that
   5007 can easily show longer lines.</p>
   5008 </div>
   5009 
   5010 <div class="decision">
   5011 <p> 80 characters is the maximum.</p>
   5012 
   5013 <p class="exception">Comment lines can be longer than 80
   5014 characters if it is not feasible to split them without
   5015 harming readability, ease of cut and paste or auto-linking
   5016 -- e.g. if a line contains an example command or a literal
   5017 URL longer than 80 characters.</p>
   5018 
   5019 <p class="exception">A raw-string literal may have content
   5020 that exceeds 80 characters.  Except for test code, such literals
   5021 should appear near the top of a file.</p>
   5022 
   5023 <p class="exception">An <code>#include</code> statement with a
   5024 long path may exceed 80 columns.</p>
   5025 
   5026 <p class="exception">You needn't be concerned about
   5027 <a href="#The__define_Guard">header guards</a> that exceed
   5028 the maximum length. </p>
   5029 </div>
   5030 
   5031 </div> 
   5032 
   5033 <h3 id="Non-ASCII_Characters">Non-ASCII Characters</h3>
   5034 
   5035 <div class="summary">
   5036 <p>Non-ASCII characters should be rare, and must use UTF-8
   5037 formatting.</p>
   5038 </div>
   5039 
   5040 <div class="stylebody">
   5041 
   5042 <p>You shouldn't hard-code user-facing text in source,
   5043 even English, so use of non-ASCII characters should be
   5044 rare. However, in certain cases it is appropriate to
   5045 include such words in your code. For example, if your
   5046 code parses data files from foreign sources, it may be
   5047 appropriate to hard-code the non-ASCII string(s) used in
   5048 those data files as delimiters. More commonly, unittest
   5049 code (which does not  need to be localized) might
   5050 contain non-ASCII strings. In such cases, you should use
   5051 UTF-8, since that is  an encoding
   5052 understood by most tools able to handle more than just
   5053 ASCII.</p>
   5054 
   5055 <p>Hex encoding is also OK, and encouraged where it
   5056 enhances readability &#8212; for example,
   5057 <code>"\xEF\xBB\xBF"</code>, or, even more simply,
   5058 <code>u8"\uFEFF"</code>, is the Unicode zero-width
   5059 no-break space character, which would be invisible if
   5060 included in the source as straight UTF-8.</p>
   5061 
   5062 <p>Use the <code>u8</code> prefix
   5063 to guarantee that a string literal containing
   5064 <code>\uXXXX</code> escape sequences is encoded as UTF-8.
   5065 Do not use it for strings containing non-ASCII characters
   5066 encoded as UTF-8, because that will produce incorrect
   5067 output if the compiler does not interpret the source file
   5068 as UTF-8. </p>
   5069 
   5070 <p>You shouldn't use the C++11 <code>char16_t</code> and
   5071 <code>char32_t</code> character types, since they're for
   5072 non-UTF-8 text. For similar reasons you also shouldn't
   5073 use <code>wchar_t</code> (unless you're writing code that
   5074 interacts with the Windows API, which uses
   5075 <code>wchar_t</code> extensively).</p>
   5076 
   5077 </div> 
   5078 
   5079 <h3 id="Spaces_vs._Tabs">Spaces vs. Tabs</h3>
   5080 
   5081 <div class="summary">
   5082 <p>Use only spaces, and indent 2 spaces at a time.</p>
   5083 </div>
   5084 
   5085 <div class="stylebody">
   5086 
   5087 <p>We use spaces for indentation. Do not use tabs in your
   5088 code. You should set your editor to emit spaces when you
   5089 hit the tab key.</p>
   5090 
   5091 </div> 
   5092 
   5093 <h3 id="Function_Declarations_and_Definitions">Function Declarations and Definitions</h3>
   5094 
   5095 <div class="summary">
   5096 <p>Return type on the same line as function name, parameters
   5097 on the same line if they fit. Wrap parameter lists which do
   5098 not fit on a single line as you would wrap arguments in a
   5099 <a href="#Function_Calls">function call</a>.</p>
   5100 </div>
   5101 
   5102 <div class="stylebody">
   5103 
   5104 <p>Functions look like this:</p>
   5105 
   5106 
   5107 <pre>ReturnType ClassName::FunctionName(Type par_name1, Type par_name2) {
   5108   DoSomething();
   5109   ...
   5110 }
   5111 </pre>
   5112 
   5113 <p>If you have too much text to fit on one line:</p>
   5114 
   5115 <pre>ReturnType ClassName::ReallyLongFunctionName(Type par_name1, Type par_name2,
   5116                                              Type par_name3) {
   5117   DoSomething();
   5118   ...
   5119 }
   5120 </pre>
   5121 
   5122 <p>or if you cannot fit even the first parameter:</p>
   5123 
   5124 <pre>ReturnType LongClassName::ReallyReallyReallyLongFunctionName(
   5125     Type par_name1,  // 4 space indent
   5126     Type par_name2,
   5127     Type par_name3) {
   5128   DoSomething();  // 2 space indent
   5129   ...
   5130 }
   5131 </pre>
   5132 
   5133 <p>Some points to note:</p>
   5134 
   5135 <ul>
   5136   <li>Choose good parameter names.</li>
   5137 
   5138   <li>Parameter names may be omitted only if the parameter is unused and its
   5139   purpose is obvious.</li>
   5140 
   5141   <li>If you cannot fit the return type and the function
   5142   name on a single line, break between them.</li>
   5143 
   5144   <li>If you break after the return type of a function
   5145   declaration or definition, do not indent.</li>
   5146 
   5147   <li>The open parenthesis is always on the same line as
   5148   the function name.</li>
   5149 
   5150   <li>There is never a space between the function name
   5151   and the open parenthesis.</li>
   5152 
   5153   <li>There is never a space between the parentheses and
   5154   the parameters.</li>
   5155 
   5156   <li>The open curly brace is always on the end of the last line of the function
   5157   declaration, not the start of the next line.</li>
   5158 
   5159   <li>The close curly brace is either on the last line by
   5160   itself or on the same line as the open curly brace.</li>
   5161 
   5162   <li>There should be a space between the close
   5163   parenthesis and the open curly brace.</li>
   5164 
   5165   <li>All parameters should be aligned if possible.</li>
   5166 
   5167   <li>Default indentation is 2 spaces.</li>
   5168 
   5169   <li>Wrapped parameters have a 4 space indent.</li>
   5170 </ul>
   5171 
   5172 <p>Unused parameters that are obvious from context may be omitted:</p>
   5173 
   5174 <pre>class Foo {
   5175  public:
   5176   Foo(Foo&amp;&amp;);
   5177   Foo(const Foo&amp;);
   5178   Foo&amp; operator=(Foo&amp;&amp;);
   5179   Foo&amp; operator=(const Foo&amp;);
   5180 };
   5181 </pre>
   5182 
   5183 <p>Unused parameters that might not be obvious should comment out the variable
   5184 name in the function definition:</p>
   5185 
   5186 <pre>class Shape {
   5187  public:
   5188   virtual void Rotate(double radians) = 0;
   5189 };
   5190 
   5191 class Circle : public Shape {
   5192  public:
   5193   void Rotate(double radians) override;
   5194 };
   5195 
   5196 void Circle::Rotate(double /*radians*/) {}
   5197 </pre>
   5198 
   5199 <pre class="badcode">// Bad - if someone wants to implement later, it's not clear what the
   5200 // variable means.
   5201 void Circle::Rotate(double) {}
   5202 </pre>
   5203 
   5204 <p>Attributes, and macros that expand to attributes, appear at the very
   5205 beginning of the function declaration or definition, before the
   5206 return type:</p>
   5207 <pre>MUST_USE_RESULT bool IsOK();
   5208 </pre>
   5209 
   5210 </div> 
   5211 
   5212 <h3 id="Formatting_Lambda_Expressions">Lambda Expressions</h3>
   5213 
   5214 <div class="summary">
   5215 <p>Format parameters and bodies as for any other function, and capture
   5216 lists like other comma-separated lists.</p>
   5217 </div>
   5218 
   5219 <div class="stylebody">
   5220 <p>For by-reference captures, do not leave a space between the
   5221 ampersand (&amp;) and the variable name.</p>
   5222 <pre>int x = 0;
   5223 auto x_plus_n = [&amp;x](int n) -&gt; int { return x + n; }
   5224 </pre>
   5225 <p>Short lambdas may be written inline as function arguments.</p>
   5226 <pre>std::set&lt;int&gt; blacklist = {7, 8, 9};
   5227 std::vector&lt;int&gt; digits = {3, 9, 1, 8, 4, 7, 1};
   5228 digits.erase(std::remove_if(digits.begin(), digits.end(), [&amp;blacklist](int i) {
   5229                return blacklist.find(i) != blacklist.end();
   5230              }),
   5231              digits.end());
   5232 </pre>
   5233 
   5234 </div> 
   5235 
   5236 <h3 id="Function_Calls">Function Calls</h3>
   5237 
   5238 <div class="summary">
   5239 <p>Either write the call all on a single line, wrap the
   5240 arguments at the parenthesis, or start the arguments on a new
   5241 line indented by four spaces and continue at that 4 space
   5242 indent. In the absence of other considerations, use the
   5243 minimum number of lines, including placing multiple arguments
   5244 on each line where appropriate.</p>
   5245 </div>
   5246 
   5247 <div class="stylebody">
   5248 
   5249 <p>Function calls have the following format:</p>
   5250 <pre>bool result = DoSomething(argument1, argument2, argument3);
   5251 </pre>
   5252 
   5253 <p>If the arguments do not all fit on one line, they
   5254 should be broken up onto multiple lines, with each
   5255 subsequent line aligned with the first argument. Do not
   5256 add spaces after the open paren or before the close
   5257 paren:</p>
   5258 <pre>bool result = DoSomething(averyveryveryverylongargument1,
   5259                           argument2, argument3);
   5260 </pre>
   5261 
   5262 <p>Arguments may optionally all be placed on subsequent
   5263 lines with a four space indent:</p>
   5264 <pre>if (...) {
   5265   ...
   5266   ...
   5267   if (...) {
   5268     bool result = DoSomething(
   5269         argument1, argument2,  // 4 space indent
   5270         argument3, argument4);
   5271     ...
   5272   }
   5273 </pre>
   5274 
   5275 <p>Put multiple arguments on a single line to reduce the
   5276 number of lines necessary for calling a function unless
   5277 there is a specific readability problem. Some find that
   5278 formatting with strictly one argument on each line is
   5279 more readable and simplifies editing of the arguments.
   5280 However, we prioritize for the reader over the ease of
   5281 editing arguments, and most readability problems are
   5282 better addressed with the following techniques.</p>
   5283 
   5284 <p>If having multiple arguments in a single line decreases
   5285 readability due to the complexity or confusing nature of the
   5286 expressions that make up some arguments, try creating
   5287 variables that capture those arguments in a descriptive name:</p>
   5288 <pre>int my_heuristic = scores[x] * y + bases[x];
   5289 bool result = DoSomething(my_heuristic, x, y, z);
   5290 </pre>
   5291 
   5292 <p>Or put the confusing argument on its own line with
   5293 an explanatory comment:</p>
   5294 <pre>bool result = DoSomething(scores[x] * y + bases[x],  // Score heuristic.
   5295                           x, y, z);
   5296 </pre>
   5297 
   5298 <p>If there is still a case where one argument is
   5299 significantly more readable on its own line, then put it on
   5300 its own line. The decision should be specific to the argument
   5301 which is made more readable rather than a general policy.</p>
   5302 
   5303 <p>Sometimes arguments form a structure that is important
   5304 for readability. In those cases, feel free to format the
   5305 arguments according to that structure:</p>
   5306 <pre>// Transform the widget by a 3x3 matrix.
   5307 my_widget.Transform(x1, x2, x3,
   5308                     y1, y2, y3,
   5309                     z1, z2, z3);
   5310 </pre>
   5311 
   5312 </div> 
   5313 
   5314 <h3 id="Braced_Initializer_List_Format">Braced Initializer List Format</h3>
   5315 
   5316 <div class="summary">
   5317 <p>Format a <a href="#Braced_Initializer_List">braced initializer list</a>
   5318 exactly like you would format a function call in its place.</p>
   5319 </div>
   5320 
   5321 <div class="stylebody">
   5322 
   5323 <p>If the braced list follows a name (e.g. a type or
   5324 variable name), format as if the <code>{}</code> were the
   5325 parentheses of a function call with that name. If there
   5326 is no name, assume a zero-length name.</p>
   5327 
   5328 <pre>// Examples of braced init list on a single line.
   5329 return {foo, bar};
   5330 functioncall({foo, bar});
   5331 std::pair&lt;int, int&gt; p{foo, bar};
   5332 
   5333 // When you have to wrap.
   5334 SomeFunction(
   5335     {"assume a zero-length name before {"},
   5336     some_other_function_parameter);
   5337 SomeType variable{
   5338     some, other, values,
   5339     {"assume a zero-length name before {"},
   5340     SomeOtherType{
   5341         "Very long string requiring the surrounding breaks.",
   5342         some, other values},
   5343     SomeOtherType{"Slightly shorter string",
   5344                   some, other, values}};
   5345 SomeType variable{
   5346     "This is too long to fit all in one line"};
   5347 MyType m = {  // Here, you could also break before {.
   5348     superlongvariablename1,
   5349     superlongvariablename2,
   5350     {short, interior, list},
   5351     {interiorwrappinglist,
   5352      interiorwrappinglist2}};
   5353 </pre>
   5354 
   5355 </div> 
   5356 
   5357 <h3 id="Conditionals">Conditionals</h3>
   5358 
   5359 <div class="summary">
   5360 <p>Prefer no spaces inside parentheses. The <code>if</code>
   5361 and <code>else</code> keywords belong on separate lines.</p>
   5362 </div>
   5363 
   5364 <div class="stylebody">
   5365 
   5366 <p>There are two acceptable formats for a basic
   5367 conditional statement. One includes spaces between the
   5368 parentheses and the condition, and one does not.</p>
   5369 
   5370 <p>The most common form is without spaces. Either is
   5371 fine, but <em>be consistent</em>. If you are modifying a
   5372 file, use the format that is already present. If you are
   5373 writing new code, use the format that the other files in
   5374 that directory or project use. If in doubt and you have
   5375 no personal preference, do not add the spaces.</p>
   5376 
   5377 <pre>if (condition) {  // no spaces inside parentheses
   5378   ...  // 2 space indent.
   5379 } else if (...) {  // The else goes on the same line as the closing brace.
   5380   ...
   5381 } else {
   5382   ...
   5383 }
   5384 </pre>
   5385 
   5386 <p>If you prefer you may add spaces inside the
   5387 parentheses:</p>
   5388 
   5389 <pre>if ( condition ) {  // spaces inside parentheses - rare
   5390   ...  // 2 space indent.
   5391 } else {  // The else goes on the same line as the closing brace.
   5392   ...
   5393 }
   5394 </pre>
   5395 
   5396 <p>Note that in all cases you must have a space between
   5397 the <code>if</code> and the open parenthesis. You must
   5398 also have a space between the close parenthesis and the
   5399 curly brace, if you're using one.</p>
   5400 
   5401 <pre class="badcode">if(condition) {   // Bad - space missing after IF.
   5402 if (condition){   // Bad - space missing before {.
   5403 if(condition){    // Doubly bad.
   5404 </pre>
   5405 
   5406 <pre>if (condition) {  // Good - proper space after IF and before {.
   5407 </pre>
   5408 
   5409 <p>Short conditional statements may be written on one
   5410 line if this enhances readability. You may use this only
   5411 when the line is brief and the statement does not use the
   5412 <code>else</code> clause.</p>
   5413 
   5414 <pre>if (x == kFoo) return new Foo();
   5415 if (x == kBar) return new Bar();
   5416 </pre>
   5417 
   5418 <p>This is not allowed when the if statement has an
   5419 <code>else</code>:</p>
   5420 
   5421 <pre class="badcode">// Not allowed - IF statement on one line when there is an ELSE clause
   5422 if (x) DoThis();
   5423 else DoThat();
   5424 </pre>
   5425 
   5426 <p>In general, curly braces are not required for
   5427 single-line statements, but they are allowed if you like
   5428 them; conditional or loop statements with complex
   5429 conditions or statements may be more readable with curly
   5430 braces. Some 
   5431 projects require that an
   5432 <code>if</code> must always always have an accompanying
   5433 brace.</p>
   5434 
   5435 <pre>if (condition)
   5436   DoSomething();  // 2 space indent.
   5437 
   5438 if (condition) {
   5439   DoSomething();  // 2 space indent.
   5440 }
   5441 </pre>
   5442 
   5443 <p>However, if one part of an
   5444 <code>if</code>-<code>else</code> statement uses curly
   5445 braces, the other part must too:</p>
   5446 
   5447 <pre class="badcode">// Not allowed - curly on IF but not ELSE
   5448 if (condition) {
   5449   foo;
   5450 } else
   5451   bar;
   5452 
   5453 // Not allowed - curly on ELSE but not IF
   5454 if (condition)
   5455   foo;
   5456 else {
   5457   bar;
   5458 }
   5459 </pre>
   5460 
   5461 <pre>// Curly braces around both IF and ELSE required because
   5462 // one of the clauses used braces.
   5463 if (condition) {
   5464   foo;
   5465 } else {
   5466   bar;
   5467 }
   5468 </pre>
   5469 
   5470 </div> 
   5471 
   5472 <h3 id="Loops_and_Switch_Statements">Loops and Switch Statements</h3>
   5473 
   5474 <div class="summary">
   5475 <p>Switch statements may use braces for blocks. Annotate
   5476 non-trivial fall-through between cases.
   5477 Braces are optional for single-statement loops.
   5478 Empty loop bodies should use empty braces or <code>continue</code>.</p>
   5479 </div>
   5480 
   5481 <div class="stylebody">
   5482 
   5483 <p><code>case</code> blocks in <code>switch</code>
   5484 statements can have curly braces or not, depending on
   5485 your preference. If you do include curly braces they
   5486 should be placed as shown below.</p>
   5487 
   5488 <p>If not conditional on an enumerated value, switch
   5489 statements should always have a <code>default</code> case
   5490 (in the case of an enumerated value, the compiler will
   5491 warn you if any values are not handled). If the default
   5492 case should never execute, simply
   5493 <code>assert</code>:</p>
   5494 
   5495  
   5496 
   5497 <div>
   5498 <pre>switch (var) {
   5499   case 0: {  // 2 space indent
   5500     ...      // 4 space indent
   5501     break;
   5502   }
   5503   case 1: {
   5504     ...
   5505     break;
   5506   }
   5507   default: {
   5508     assert(false);
   5509   }
   5510 }
   5511 </pre>
   5512 </div> 
   5513 
   5514 
   5515 
   5516 
   5517 
   5518 <p> Braces are optional for single-statement loops.</p>
   5519 
   5520 <pre>for (int i = 0; i &lt; kSomeNumber; ++i)
   5521   printf("I love you\n");
   5522 
   5523 for (int i = 0; i &lt; kSomeNumber; ++i) {
   5524   printf("I take it back\n");
   5525 }
   5526 </pre>
   5527 
   5528 
   5529 <p>Empty loop bodies should use an empty pair of braces or <code>continue</code>,
   5530 but not a single semicolon.</p>
   5531 
   5532 <pre>while (condition) {
   5533   // Repeat test until it returns false.
   5534 }
   5535 for (int i = 0; i &lt; kSomeNumber; ++i) {}  // Good - one newline is also OK.
   5536 while (condition) continue;  // Good - continue indicates no logic.
   5537 </pre>
   5538 
   5539 <pre class="badcode">while (condition);  // Bad - looks like part of do/while loop.
   5540 </pre>
   5541 
   5542 </div> 
   5543 
   5544 <h3 id="Pointer_and_Reference_Expressions">Pointer and Reference Expressions</h3>
   5545 
   5546 <div class="summary">
   5547 <p>No spaces around period or arrow. Pointer operators do not
   5548 have trailing spaces.</p>
   5549 </div>
   5550 
   5551 <div class="stylebody">
   5552 
   5553 <p>The following are examples of correctly-formatted
   5554 pointer and reference expressions:</p>
   5555 
   5556 <pre>x = *p;
   5557 p = &amp;x;
   5558 x = r.y;
   5559 x = r-&gt;y;
   5560 </pre>
   5561 
   5562 <p>Note that:</p>
   5563 
   5564 <ul>
   5565   <li>There are no spaces around the period or arrow when
   5566   accessing a member.</li>
   5567 
   5568    <li>Pointer operators have no space after the
   5569    <code>*</code> or <code>&amp;</code>.</li>
   5570 </ul>
   5571 
   5572 <p>When declaring a pointer variable or argument, you may
   5573 place the asterisk adjacent to either the type or to the
   5574 variable name:</p>
   5575 
   5576 <pre>// These are fine, space preceding.
   5577 char *c;
   5578 const string &amp;str;
   5579 
   5580 // These are fine, space following.
   5581 char* c;
   5582 const string&amp; str;
   5583 </pre>
   5584 
   5585 It is allowed (if unusual) to declare multiple variables in the same
   5586 declaration, but it is disallowed if any of those have pointer or
   5587 reference decorations. Such declarations are easily misread.
   5588 <pre>// Fine if helpful for readability.
   5589 int x, y;
   5590 </pre>
   5591 <pre class="badcode">int x, *y;  // Disallowed - no &amp; or * in multiple declaration
   5592 char * c;  // Bad - spaces on both sides of *
   5593 const string &amp; str;  // Bad - spaces on both sides of &amp;
   5594 </pre>
   5595 
   5596 <p>You should do this consistently within a single
   5597 file,
   5598 so, when modifying an existing file, use the style in
   5599 that file.</p>
   5600 
   5601 </div> 
   5602 
   5603 <h3 id="Boolean_Expressions">Boolean Expressions</h3>
   5604 
   5605 <div class="summary">
   5606 <p>When you have a boolean expression that is longer than the
   5607 <a href="#Line_Length">standard line length</a>, be
   5608 consistent in how you break up the lines.</p>
   5609 </div>
   5610 
   5611 <div class="stylebody">
   5612 
   5613 <p>In this example, the logical AND operator is always at
   5614 the end of the lines:</p>
   5615 
   5616 <pre>if (this_one_thing &gt; this_other_thing &amp;&amp;
   5617     a_third_thing == a_fourth_thing &amp;&amp;
   5618     yet_another &amp;&amp; last_one) {
   5619   ...
   5620 }
   5621 </pre>
   5622 
   5623 <p>Note that when the code wraps in this example, both of
   5624 the <code>&amp;&amp;</code> logical AND operators are at
   5625 the end of the line. This is more common in Google code,
   5626 though wrapping all operators at the beginning of the
   5627 line is also allowed. Feel free to insert extra
   5628 parentheses judiciously because they can be very helpful
   5629 in increasing readability when used
   5630 appropriately. Also note that you should always use
   5631 the punctuation operators, such as
   5632 <code>&amp;&amp;</code> and <code>~</code>, rather than
   5633 the word operators, such as <code>and</code> and
   5634 <code>compl</code>.</p>
   5635 
   5636 </div> 
   5637 
   5638 <h3 id="Return_Values">Return Values</h3>
   5639 
   5640 <div class="summary">
   5641 <p>Do not needlessly surround the <code>return</code>
   5642 expression with parentheses.</p>
   5643 </div>
   5644 
   5645 <div class="stylebody">
   5646 
   5647 <p>Use parentheses in <code>return expr;</code> only
   5648 where you would use them in <code>x = expr;</code>.</p>
   5649 
   5650 <pre>return result;                  // No parentheses in the simple case.
   5651 // Parentheses OK to make a complex expression more readable.
   5652 return (some_long_condition &amp;&amp;
   5653         another_condition);
   5654 </pre>
   5655 
   5656 <pre class="badcode">return (value);                // You wouldn't write var = (value);
   5657 return(result);                // return is not a function!
   5658 </pre>
   5659 
   5660 </div> 
   5661 
   5662  
   5663 
   5664 <h3 id="Variable_and_Array_Initialization">Variable and Array Initialization</h3>
   5665 
   5666 <div class="summary">
   5667 <p>Your choice of <code>=</code>, <code>()</code>, or
   5668 <code>{}</code>.</p>
   5669 </div>
   5670 
   5671 <div class="stylebody">
   5672 
   5673 <p>You may choose between <code>=</code>,
   5674 <code>()</code>, and <code>{}</code>; the following are
   5675 all correct:</p>
   5676 
   5677 <pre>int x = 3;
   5678 int x(3);
   5679 int x{3};
   5680 string name = "Some Name";
   5681 string name("Some Name");
   5682 string name{"Some Name"};
   5683 </pre>
   5684 
   5685 <p>Be careful when using a braced initialization list <code>{...}</code>
   5686 on a type with an <code>std::initializer_list</code> constructor.
   5687 A nonempty <i>braced-init-list</i> prefers the
   5688 <code>std::initializer_list</code> constructor whenever
   5689 possible. Note that empty braces <code>{}</code> are special, and
   5690 will call a default constructor if available. To force the
   5691 non-<code>std::initializer_list</code> constructor, use parentheses
   5692 instead of braces.</p>
   5693 
   5694 <pre>std::vector&lt;int&gt; v(100, 1);  // A vector of 100 1s.
   5695 std::vector&lt;int&gt; v{100, 1};  // A vector of 100, 1.
   5696 </pre>
   5697 
   5698 <p>Also, the brace form prevents narrowing of integral
   5699 types. This can prevent some types of programming
   5700 errors.</p>
   5701 
   5702 <pre>int pi(3.14);  // OK -- pi == 3.
   5703 int pi{3.14};  // Compile error: narrowing conversion.
   5704 </pre>
   5705 
   5706 </div> 
   5707 
   5708 <h3 id="Preprocessor_Directives">Preprocessor Directives</h3>
   5709 
   5710 <div class="summary">
   5711 <p>The hash mark that starts a preprocessor directive should
   5712 always be at the beginning of the line.</p>
   5713 </div>
   5714 
   5715 <div class="stylebody">
   5716 
   5717 <p>Even when preprocessor directives are within the body
   5718 of indented code, the directives should start at the
   5719 beginning of the line.</p>
   5720 
   5721 <pre>// Good - directives at beginning of line
   5722   if (lopsided_score) {
   5723 #if DISASTER_PENDING      // Correct -- Starts at beginning of line
   5724     DropEverything();
   5725 # if NOTIFY               // OK but not required -- Spaces after #
   5726     NotifyClient();
   5727 # endif
   5728 #endif
   5729     BackToNormal();
   5730   }
   5731 </pre>
   5732 
   5733 <pre class="badcode">// Bad - indented directives
   5734   if (lopsided_score) {
   5735     #if DISASTER_PENDING  // Wrong!  The "#if" should be at beginning of line
   5736     DropEverything();
   5737     #endif                // Wrong!  Do not indent "#endif"
   5738     BackToNormal();
   5739   }
   5740 </pre>
   5741 
   5742 </div> 
   5743 
   5744 <h3 id="Class_Format">Class Format</h3>
   5745 
   5746 <div class="summary">
   5747 <p>Sections in <code>public</code>, <code>protected</code> and
   5748 <code>private</code> order, each indented one space.</p>
   5749 </div>
   5750 
   5751 <div class="stylebody">
   5752 
   5753 <p>The basic format for a class definition (lacking the
   5754 comments, see <a href="#Class_Comments">Class
   5755 Comments</a> for a discussion of what comments are
   5756 needed) is:</p>
   5757 
   5758 <pre>class MyClass : public OtherClass {
   5759  public:      // Note the 1 space indent!
   5760   MyClass();  // Regular 2 space indent.
   5761   explicit MyClass(int var);
   5762   ~MyClass() {}
   5763 
   5764   void SomeFunction();
   5765   void SomeFunctionThatDoesNothing() {
   5766   }
   5767 
   5768   void set_some_var(int var) { some_var_ = var; }
   5769   int some_var() const { return some_var_; }
   5770 
   5771  private:
   5772   bool SomeInternalFunction();
   5773 
   5774   int some_var_;
   5775   int some_other_var_;
   5776 };
   5777 </pre>
   5778 
   5779 <p>Things to note:</p>
   5780 
   5781 <ul>
   5782   <li>Any base class name should be on the same line as
   5783   the subclass name, subject to the 80-column limit.</li>
   5784 
   5785   <li>The <code>public:</code>, <code>protected:</code>,
   5786   and <code>private:</code> keywords should be indented
   5787   one space.</li>
   5788 
   5789   <li>Except for the first instance, these keywords
   5790   should be preceded by a blank line. This rule is
   5791   optional in small classes.</li>
   5792 
   5793   <li>Do not leave a blank line after these
   5794   keywords.</li>
   5795 
   5796   <li>The <code>public</code> section should be first,
   5797   followed by the <code>protected</code> and finally the
   5798   <code>private</code> section.</li>
   5799 
   5800   <li>See <a href="#Declaration_Order">Declaration
   5801   Order</a> for rules on ordering declarations within
   5802   each of these sections.</li>
   5803 </ul>
   5804 
   5805 </div> 
   5806 
   5807 <h3 id="Constructor_Initializer_Lists">Constructor Initializer Lists</h3>
   5808 
   5809 <div class="summary">
   5810 <p>Constructor initializer lists can be all on one line or
   5811 with subsequent lines indented four spaces.</p>
   5812 </div>
   5813 
   5814 <div class="stylebody">
   5815 
   5816 <p>The acceptable formats for initializer lists are:</p>
   5817 
   5818 <pre>// When everything fits on one line:
   5819 MyClass::MyClass(int var) : some_var_(var) {
   5820   DoSomething();
   5821 }
   5822 
   5823 // If the signature and initializer list are not all on one line,
   5824 // you must wrap before the colon and indent 4 spaces:
   5825 MyClass::MyClass(int var)
   5826     : some_var_(var), some_other_var_(var + 1) {
   5827   DoSomething();
   5828 }
   5829 
   5830 // When the list spans multiple lines, put each member on its own line
   5831 // and align them:
   5832 MyClass::MyClass(int var)
   5833     : some_var_(var),             // 4 space indent
   5834       some_other_var_(var + 1) {  // lined up
   5835   DoSomething();
   5836 }
   5837 
   5838 // As with any other code block, the close curly can be on the same
   5839 // line as the open curly, if it fits.
   5840 MyClass::MyClass(int var)
   5841     : some_var_(var) {}
   5842 </pre>
   5843 
   5844 </div> 
   5845 
   5846 <h3 id="Namespace_Formatting">Namespace Formatting</h3>
   5847 
   5848 <div class="summary">
   5849 <p>The contents of namespaces are not indented.</p>
   5850 </div>
   5851 
   5852 <div class="stylebody">
   5853 
   5854 <p><a href="#Namespaces">Namespaces</a> do not add an
   5855 extra level of indentation. For example, use:</p>
   5856 
   5857 <pre>namespace {
   5858 
   5859 void foo() {  // Correct.  No extra indentation within namespace.
   5860   ...
   5861 }
   5862 
   5863 }  // namespace
   5864 </pre>
   5865 
   5866 <p>Do not indent within a namespace:</p>
   5867 
   5868 <pre class="badcode">namespace {
   5869 
   5870   // Wrong.  Indented when it should not be.
   5871   void foo() {
   5872     ...
   5873   }
   5874 
   5875 }  // namespace
   5876 </pre>
   5877 
   5878 <p>When declaring nested namespaces, put each namespace
   5879 on its own line.</p>
   5880 
   5881 <pre>namespace foo {
   5882 namespace bar {
   5883 </pre>
   5884 
   5885 </div> 
   5886 
   5887 <h3 id="Horizontal_Whitespace">Horizontal Whitespace</h3>
   5888 
   5889 <div class="summary">
   5890 <p>Use of horizontal whitespace depends on location. Never put
   5891 trailing whitespace at the end of a line.</p>
   5892 </div>
   5893 
   5894 <div class="stylebody">
   5895 
   5896 <h4 class="stylepoint_subsection">General</h4>
   5897 
   5898 <pre>void f(bool b) {  // Open braces should always have a space before them.
   5899   ...
   5900 int i = 0;  // Semicolons usually have no space before them.
   5901 // Spaces inside braces for braced-init-list are optional.  If you use them,
   5902 // put them on both sides!
   5903 int x[] = { 0 };
   5904 int x[] = {0};
   5905 
   5906 // Spaces around the colon in inheritance and initializer lists.
   5907 class Foo : public Bar {
   5908  public:
   5909   // For inline function implementations, put spaces between the braces
   5910   // and the implementation itself.
   5911   Foo(int b) : Bar(), baz_(b) {}  // No spaces inside empty braces.
   5912   void Reset() { baz_ = 0; }  // Spaces separating braces from implementation.
   5913   ...
   5914 </pre>
   5915 
   5916 <p>Adding trailing whitespace can cause extra work for
   5917 others editing the same file, when they merge, as can
   5918 removing existing trailing whitespace. So: Don't
   5919 introduce trailing whitespace. Remove it if you're
   5920 already changing that line, or do it in a separate
   5921 clean-up 
   5922 operation (preferably when no-one
   5923 else is working on the file).</p>
   5924 
   5925 <h4 class="stylepoint_subsection">Loops and Conditionals</h4>
   5926 
   5927 <pre>if (b) {          // Space after the keyword in conditions and loops.
   5928 } else {          // Spaces around else.
   5929 }
   5930 while (test) {}   // There is usually no space inside parentheses.
   5931 switch (i) {
   5932 for (int i = 0; i &lt; 5; ++i) {
   5933 // Loops and conditions may have spaces inside parentheses, but this
   5934 // is rare.  Be consistent.
   5935 switch ( i ) {
   5936 if ( test ) {
   5937 for ( int i = 0; i &lt; 5; ++i ) {
   5938 // For loops always have a space after the semicolon.  They may have a space
   5939 // before the semicolon, but this is rare.
   5940 for ( ; i &lt; 5 ; ++i) {
   5941   ...
   5942 
   5943 // Range-based for loops always have a space before and after the colon.
   5944 for (auto x : counts) {
   5945   ...
   5946 }
   5947 switch (i) {
   5948   case 1:         // No space before colon in a switch case.
   5949     ...
   5950   case 2: break;  // Use a space after a colon if there's code after it.
   5951 </pre>
   5952 
   5953 <h4 class="stylepoint_subsection">Operators</h4>
   5954 
   5955 <pre>// Assignment operators always have spaces around them.
   5956 x = 0;
   5957 
   5958 // Other binary operators usually have spaces around them, but it's
   5959 // OK to remove spaces around factors.  Parentheses should have no
   5960 // internal padding.
   5961 v = w * x + y / z;
   5962 v = w*x + y/z;
   5963 v = w * (x + z);
   5964 
   5965 // No spaces separating unary operators and their arguments.
   5966 x = -5;
   5967 ++x;
   5968 if (x &amp;&amp; !y)
   5969   ...
   5970 </pre>
   5971 
   5972 <h4 class="stylepoint_subsection">Templates and Casts</h4>
   5973 
   5974 <pre>// No spaces inside the angle brackets (&lt; and &gt;), before
   5975 // &lt;, or between &gt;( in a cast
   5976 std::vector&lt;string&gt; x;
   5977 y = static_cast&lt;char*&gt;(x);
   5978 
   5979 // Spaces between type and pointer are OK, but be consistent.
   5980 std::vector&lt;char *&gt; x;
   5981 </pre>
   5982 
   5983 </div> 
   5984 
   5985 <h3 id="Vertical_Whitespace">Vertical Whitespace</h3>
   5986 
   5987 <div class="summary">
   5988 <p>Minimize use of vertical whitespace.</p>
   5989 </div>
   5990 
   5991 <div class="stylebody">
   5992 
   5993 <p>This is more a principle than a rule: don't use blank
   5994 lines when you don't have to. In particular, don't put
   5995 more than one or two blank lines between functions,
   5996 resist starting functions with a blank line, don't end
   5997 functions with a blank line, and be discriminating with
   5998 your use of blank lines inside functions.</p>
   5999 
   6000 <p>The basic principle is: The more code that fits on one
   6001 screen, the easier it is to follow and understand the
   6002 control flow of the program. Of course, readability can
   6003 suffer from code being too dense as well as too spread
   6004 out, so use your judgement. But in general, minimize use
   6005 of vertical whitespace.</p>
   6006 
   6007 <p>Some rules of thumb to help when blank lines may be
   6008 useful:</p>
   6009 
   6010 <ul>
   6011   <li>Blank lines at the beginning or end of a function
   6012   very rarely help readability.</li>
   6013 
   6014   <li>Blank lines inside a chain of if-else blocks may
   6015   well help readability.</li>
   6016 </ul>
   6017 
   6018 </div> 
   6019 
   6020 <h2 id="Exceptions_to_the_Rules">Exceptions to the Rules</h2>
   6021 
   6022 <p>The coding conventions described above are mandatory.
   6023 However, like all good rules, these sometimes have exceptions,
   6024 which we discuss here.</p>
   6025 
   6026  
   6027 
   6028 <div>
   6029 <h3 id="Existing_Non-conformant_Code">Existing Non-conformant Code</h3>
   6030 
   6031 <div class="summary">
   6032 <p>You may diverge from the rules when dealing with code that
   6033 does not conform to this style guide.</p>
   6034 </div>
   6035 
   6036 <div class="stylebody">
   6037 
   6038 <p>If you find yourself modifying code that was written
   6039 to specifications other than those presented by this
   6040 guide, you may have to diverge from these rules in order
   6041 to stay consistent with the local conventions in that
   6042 code. If you are in doubt about how to do this, ask the
   6043 original author or the person currently responsible for
   6044 the code. Remember that <em>consistency</em> includes
   6045 local consistency, too.</p>
   6046 
   6047 </div> 
   6048 </div> 
   6049 
   6050  
   6051 
   6052 <h3 id="Windows_Code">Windows Code</h3>
   6053 
   6054 <div class="summary">
   6055 <p> Windows
   6056 programmers have developed their own set of coding
   6057 conventions, mainly derived from the conventions in Windows
   6058 headers and other Microsoft code. We want to make it easy
   6059 for anyone to understand your code, so we have a single set
   6060 of guidelines for everyone writing C++ on any platform.</p>
   6061 </div>
   6062 
   6063 <div class="stylebody">
   6064 <p>It is worth reiterating a few of the guidelines that
   6065 you might forget if you are used to the prevalent Windows
   6066 style:</p>
   6067 
   6068 <ul>
   6069   <li>Do not use Hungarian notation (for example, naming
   6070   an integer <code>iNum</code>). Use the Google naming
   6071   conventions, including the <code>.cc</code> extension
   6072   for source files.</li>
   6073 
   6074   <li>Windows defines many of its own synonyms for
   6075   primitive types, such as <code>DWORD</code>,
   6076   <code>HANDLE</code>, etc. It is perfectly acceptable,
   6077   and encouraged, that you use these types when calling
   6078   Windows API functions. Even so, keep as close as you
   6079   can to the underlying C++ types. For example, use
   6080   <code>const TCHAR *</code> instead of
   6081   <code>LPCTSTR</code>.</li>
   6082 
   6083   <li>When compiling with Microsoft Visual C++, set the
   6084   compiler to warning level 3 or higher, and treat all
   6085   warnings as errors.</li>
   6086 
   6087   <li>Do not use <code>#pragma once</code>; instead use
   6088   the standard Google include guards. The path in the
   6089   include guards should be relative to the top of your
   6090   project tree.</li>
   6091 
   6092   <li>In fact, do not use any nonstandard extensions,
   6093   like <code>#pragma</code> and <code>__declspec</code>,
   6094   unless you absolutely must. Using
   6095   <code>__declspec(dllimport)</code> and
   6096   <code>__declspec(dllexport)</code> is allowed; however,
   6097   you must use them through macros such as
   6098   <code>DLLIMPORT</code> and <code>DLLEXPORT</code>, so
   6099   that someone can easily disable the extensions if they
   6100   share the code.</li>
   6101 </ul>
   6102 
   6103 <p>However, there are just a few rules that we
   6104 occasionally need to break on Windows:</p>
   6105 
   6106 <ul>
   6107   <li>Normally we <a href="#Multiple_Inheritance">forbid
   6108   the use of multiple implementation inheritance</a>;
   6109   however, it is required when using COM and some ATL/WTL
   6110   classes. You may use multiple implementation
   6111   inheritance to implement COM or ATL/WTL classes and
   6112   interfaces.</li>
   6113 
   6114   <li>Although you should not use exceptions in your own
   6115   code, they are used extensively in the ATL and some
   6116   STLs, including the one that comes with Visual C++.
   6117   When using the ATL, you should define
   6118   <code>_ATL_NO_EXCEPTIONS</code> to disable exceptions.
   6119   You should investigate whether you can also disable
   6120   exceptions in your STL, but if not, it is OK to turn on
   6121   exceptions in the compiler. (Note that this is only to
   6122   get the STL to compile. You should still not write
   6123   exception handling code yourself.)</li>
   6124 
   6125   <li>The usual way of working with precompiled headers
   6126   is to include a header file at the top of each source
   6127   file, typically with a name like <code>StdAfx.h</code>
   6128   or <code>precompile.h</code>. To make your code easier
   6129   to share with other projects, avoid including this file
   6130   explicitly (except in <code>precompile.cc</code>), and
   6131   use the <code>/FI</code> compiler option to include the
   6132   file automatically.</li>
   6133 
   6134   <li>Resource headers, which are usually named
   6135   <code>resource.h</code> and contain only macros, do not
   6136   need to conform to these style guidelines.</li>
   6137 </ul>
   6138 
   6139 </div> 
   6140 
   6141 <h2 class="ignoreLink">Parting Words</h2>
   6142 
   6143 <p>Use common sense and <em>BE CONSISTENT</em>.</p>
   6144 
   6145 <p>If you are editing code, take a few minutes to look at the
   6146 code around you and determine its style. If they use spaces
   6147 around their <code>if</code> clauses, you should, too. If their
   6148 comments have little boxes of stars around them, make your
   6149 comments have little boxes of stars around them too.</p>
   6150 
   6151 <p>The point of having style guidelines is to have a common
   6152 vocabulary of coding so people can concentrate on what you are
   6153 saying, rather than on how you are saying it. We present global
   6154 style rules here so people know the vocabulary. But local style
   6155 is also important. If code you add to a file looks drastically
   6156 different from the existing code around it, the discontinuity
   6157 throws readers out of their rhythm when they go to read it. Try
   6158 to avoid this.</p>
   6159 
   6160 
   6161 
   6162 <p>OK, enough writing about writing code; the code itself is much
   6163 more interesting. Have fun!</p>
   6164 
   6165 <hr>
   6166 
   6167 </div> 
   6168 </div>
   6169 </body>
   6170 </html>
   6171