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