-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix(A8-4-9): Split A8-4-8 and A8-4-9
- Loading branch information
Showing
3 changed files
with
60 additions
and
58 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
> **Rule A8-4-9 (required, design, automated)** | ||
> | ||
> ”in-out” parameters declared as T & shall be modified. | ||
## Rationale | ||
|
||
An ”in-out” parameter is declared with a type of reference to non-const. This means | ||
that a fully constructed object is passed into the function that can be read as well as | ||
modified. | ||
Note: Completely replacing the passed in object without reading any data from it | ||
would make it an ”out” parameter instead and is not considered compliant with this | ||
rule, also see rule: A8-4-8 | ||
|
||
## Example | ||
|
||
```cpp | ||
// $Id: A8-4-9.cpp 306178 2018-02-01 15:52:25Z christof.meerwald $ | ||
|
||
#include <cstdint> | ||
#include <numeric> | ||
#include <string> | ||
#include <vector> | ||
|
||
// Non-Compliant: does not modify the "in-out" parameter | ||
int32_t Sum(std::vector<int32_t> &v) | ||
{ | ||
return std::accumulate(v.begin(), v.end(), 0); | ||
} | ||
|
||
// Compliant: Modifying "in-out" parameter | ||
void AppendNewline(std::string &s) | ||
{ | ||
s += ’\n’; | ||
} | ||
|
||
// Non-Compliant: Replacing parameter value | ||
void GetFileExtension(std::string &ext) | ||
{ | ||
ext = ".cpp"; | ||
} | ||
|
||
``` | ||
## See also | ||
C++ Core Guidelines [11]: F.17: For ”in-out” parameters, pass by reference to | ||
non-const | ||
JSF December 2005 [8]: AV Rule 117.2: An object should be passed as T& if | ||
the function may change the value of the object. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters