mirror of
https://github.com/isocpp/CppCoreGuidelines.git
synced 2024-03-22 13:30:58 +08:00
Fix CP.3 to allow local reasoning and compilation without error (#951)
* Fix CP.3 to allow local reasoning and compilation without error (CP.3: Minimize explicit sharing of writable data) Use 'ES.28: Use lambdas for complex initialization, especially of const variables' to ensure we can see from the body of the function that the function called in async only require const parameter. This ensure that if a non local change to the function signature (making the const parameter non const) it will result in a compilation error. Added necessary construct and compiled with https://godbolt.org/g/tjGXbV * Update CppCoreGuidelines.md
This commit is contained in:
parent
0de765443a
commit
1d8ed2b59e
|
@ -13319,23 +13319,20 @@ The less sharing you do, the less chance you have to wait on a lock (so performa
|
|||
Image altitude_map(const vector<Reading>&);
|
||||
// ...
|
||||
|
||||
void process_readings(istream& socket1)
|
||||
void process_readings(const Readings& surface_readings, istream& socket1)
|
||||
{
|
||||
vector<Reading> surface_readings;
|
||||
socket1 >> surface_readings;
|
||||
if (!socket1) throw Bad_input{};
|
||||
|
||||
auto h1 = async([&] { if (!validate(surface_readings)) throw Invalid_data{}; });
|
||||
auto h2 = async([&] { return temperature_gradiants(surface_readings); });
|
||||
auto h3 = async([&] { return altitude_map(surface_readings); });
|
||||
// ...
|
||||
auto v1 = h1.get();
|
||||
h1.get();
|
||||
auto v2 = h2.get();
|
||||
auto v3 = h3.get();
|
||||
// ...
|
||||
}
|
||||
|
||||
Without those `const`s, we would have to review every asynchronously invoked function for potential data races on `surface_readings`.
|
||||
Making `surface_readings` const allow reasoning using only the function body.
|
||||
|
||||
##### Note
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user