Namespaces
Variants
Views
Actions

Difference between revisions of "cpp/string/basic string/swap"

From cppreference.com
< cpp‎ | string‎ | basic string
(Added LWG issue #535 DR.)
m (headers sorted)
Line 41: Line 41:
 
{{example
 
{{example
 
|code=
 
|code=
#include <string>
 
 
#include <iostream>
 
#include <iostream>
 +
#include <string>
  
 
int main()  
 
int main()  

Revision as of 23:56, 2 June 2023

 
 
 
std::basic_string
Member functions
Element access
Iterators
Capacity
Modifiers
basic_string::swap
Search
Operations
Constants
Non-member functions
I/O
Comparison
(until C++20)(until C++20)(until C++20)(until C++20)(until C++20)(C++20)
Numeric conversions
(C++11)(C++11)(C++11)
(C++11)(C++11)
(C++11)(C++11)(C++11)
(C++11)
(C++11)
Literals
Helper classes
Deduction guides (C++17)

 
void swap( basic_string& other );
(until C++17)
void swap( basic_string& other ) noexcept(/* see below */);
(since C++17)
(until C++20)
constexpr void swap( basic_string& other ) noexcept(/* see below */);
(since C++20)

Exchanges the contents of the string with those of other. All iterators and references may be invalidated.

The behavior is undefined if Allocator does not propagate on swap and the allocators of *this and other are unequal.

(since C++11)

Contents

Parameters

other - string to exchange the contents with

Return value

(none)

Complexity

Constant.

Exceptions

No exception is thrown, except in the case where the behavior is undefined (see above)(since C++11).

noexcept specification:  
noexcept(std::allocator_traits<Allocator>::propagate_on_container_swap::value ||
         std::allocator_traits<Allocator>::is_always_equal::value)
(since C++17)

Example

#include <iostream>
#include <string>
 
int main() 
{
    std::string a = "AAA";
    std::string b = "BBBB";
 
    std::cout << "Before swap:\n"
                 "a = " << a << "\n"
                 "b = " << b << "\n\n";
 
    a.swap(b);
 
    std::cout << "After swap:\n"
                 "a = " << a << "\n"
                 "b = " << b << '\n';
}

Output:

Before swap:
a = AAA
b = BBBB
 
After swap:
a = BBBB
b = AAA

Defect reports

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

DR Applied to Behavior as published Correct behavior
LWG 403 C++98 swap() might throw an exception no exception is thrown
LWG 535 C++98 swapping strings did not preserve the character orders orders are also preserved

See also

swaps the values of two objects
(function template) [edit]
swaps two ranges of elements
(function template) [edit]
swaps the contents
(public member function of std::basic_string_view<CharT,Traits>) [edit]