Self Move Assignment in the C Standard Library
The C standard library guarantees certain behaviors for self move assignment, as defined in the standard.
Specifically, the standard states that for functions in the standard library with arguments of type T&&, the implementation may assume that the parameter is a unique reference to the argument. This means that the standard library may optimize its behavior based on the assumption that the parameter is a temporary rvalue.
In the case of self move assignment, the implementation is allowed to assume that the argument vector is a prvalue. This means that the standard library may perform optimizations that would not be possible if the argument was an lvalue.
As a result, self move assignment in the standard library is likely to result in the vector being left in a resource-less state, with a capacity of 0. If the vector already has a capacity of 0, the self move assignment will be a no-op.
Update
The latest draft of the C standard explicitly states that in the MoveAssignable requirements, the expression t = rv (where rv is an rvalue) only requires t to be equivalent to rv prior to the assignment if t and rv do not reference the same object. Additionally, rv's state is unspecified after the assignment.
The above is the detailed content of What are the implications of self move assignment for vectors in the C Standard Library?. For more information, please follow other related articles on the PHP Chinese website!