C++ style guide: Difference between revisions

Add section for lambda expressions
(Add section for lambda expressions)
 
(3 intermediate revisions by the same user not shown)
Line 84: Line 84:
   }
   }
</syntaxhighlight>
</syntaxhighlight>
==== #ifdef directives ====
Indent code that follows a conditional processor directive such as {{codeline|#ifdef}} or {{codeline|#else}}.
Example
<syntaxhighlight lang="cpp">
#if defined (HAVE_CONFIG_H)
#  include "config.h"
#endif
</syntaxhighlight>
The '#' character may also be placed with the directive rather than remaining in column 1 if this looks better.


==== Split long expressions ====
==== Split long expressions ====
Line 313: Line 327:
</syntaxhighlight>
</syntaxhighlight>
|}
|}
=== new/delete ===
Pointers that will be allocated memory with {{codeline|new}} should be initialized with the C++ literal {{codeline|nullptr}}, not the numerical value 0 or the macro {{codeline|NULL}}.
The {{codeline|delete}} keyword accepts {{codeline|nullptr}} and programmers should not put an {{codeline|if (ptr)}} guard around {{codeline|delete}}.
{| class="wikitable"
! style="color:green;" | good
! style="color:darkred;" | bad
|-
| <syntaxhighlight lang="c++">
delete ptr;
</syntaxhighlight>
| <syntaxhighlight lang="c++">
if (ptr)
  delete ptr;
</syntaxhighlight>
|}
=== lambda expressions ===
When capturing variables from the surrounding function, explicitly list the variables being captured rather than relying on a default capture by value (`[=]`) or by reference (`[&]`).  This more clearly captures the programmer's intent and makes the code more understandable.


=== std::string ===
=== std::string ===
1,072

edits