C++ style guide: Difference between revisions

Add section for lambda expressions
(Add section for lambda expressions)
 
(2 intermediate revisions by the same user not shown)
Line 87: Line 87:
==== #ifdef directives ====
==== #ifdef directives ====


Indent code that follows a conditional processor directive such as {{codeline|#ifdef}} or {{codeline|else}}.
Indent code that follows a conditional processor directive such as {{codeline|#ifdef}} or {{codeline|#else}}.


Example
Example
Line 97: Line 97:
</syntaxhighlight>
</syntaxhighlight>


The '#' character may also be placed with the directive rather than remaining in column 1.
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 327: 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