mirror of
https://github.com/isocpp/CppCoreGuidelines.git
synced 2024-03-22 13:30:58 +08:00
Address items called out in Issue 1418 (#1538)
This commit is contained in:
parent
cd478777c1
commit
fc32070096
|
@ -11981,7 +11981,8 @@ The language already knows the common cases where objects can be moved from, esp
|
|||
|
||||
Never write `std::move()` just because you've heard "it's more efficient."
|
||||
In general, don't believe claims of "efficiency" without data (???).
|
||||
In general, don't complicate your code without reason (??)
|
||||
In general, don't complicate your code without reason (??).
|
||||
Never write `std::move()` on a const object, it is silently transformed into a copy (see Item 23 in [Meyers15](#Meyers15))
|
||||
|
||||
##### Example, bad
|
||||
|
||||
|
@ -12021,9 +12022,9 @@ The language already knows that a returned value is a temporary object that can
|
|||
|
||||
* Flag use of `std::move(x)` where `x` is an rvalue or the language will already treat it as an rvalue, including `return std::move(local_variable);` and `std::move(f())` on a function that returns by value.
|
||||
* Flag functions taking an `S&&` parameter if there is no `const S&` overload to take care of lvalues.
|
||||
* Flag a `std::move`s argument passed to a parameter, except when the parameter type is one of the following: an `X&&` rvalue reference; a `T&&` forwarding reference where `T` is a template parameter type; or by value and the type is move-only.
|
||||
* Flag a `std::move`s argument passed to a parameter, except when the parameter type is an `X&&` rvalue reference or the type is move-only and the parameter is passed by value.
|
||||
* Flag when `std::move` is applied to a forwarding reference (`T&&` where `T` is a template parameter type). Use `std::forward` instead.
|
||||
* Flag when `std::move` is applied to other than an rvalue reference. (More general case of the previous rule to cover the non-forwarding cases.)
|
||||
* Flag when `std::move` is applied to other than an rvalue reference to non-const. (More general case of the previous rule to cover the non-forwarding cases.)
|
||||
* Flag when `std::forward` is applied to an rvalue reference (`X&&` where `X` is a concrete type). Use `std::move` instead.
|
||||
* Flag when `std::forward` is applied to other than a forwarding reference. (More general case of the previous rule to cover the non-moving cases.)
|
||||
* Flag when an object is potentially moved from and the next operation is a `const` operation; there should first be an intervening non-`const` operation, ideally assignment, to first reset the object's value.
|
||||
|
|
Loading…
Reference in New Issue
Block a user