Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::tuple<Types...>::swap

      From cppreference.com
      <cpp‎ |utility‎ |tuple
       
       
      Utilities library
       
       
      Defined in header<tuple>
      void swap( tuple& other)noexcept(/* see below */);
      (1)(since C++11)
      (constexpr since C++20)
      constexprvoid swap(const tuple& other)noexcept(/* see below */)const;
      (2)(since C++23)

      Callsswap (which might bestd::swap, or might be found viaADL) for each element in*this and its corresponding element inother.

      If any selectedswap function call is ill-formed, or does not swap the corresponding elements of both tuples, the behavior is undefined.

      (until C++23)

      If any selectedswap function call does not swap the corresponding elements of both tuples, the behavior is undefined.

      1) The program is ill-formed if(std::is_swappable_v<Types>&& ...) is nottrue.
      2) The program is ill-formed if(std::is_swappable_v<const Types>&& ...) is nottrue.
      (since C++23)

      Contents

      [edit]Parameters

      other - tuple of values to swap

      [edit]Return value

      (none)

      [edit]Exceptions

      noexcept specification:  
      noexcept(

         noexcept(swap(std::declval<T0&>>(),std::declval<T0&>()))&&
         noexcept(swap(std::declval<T1&>>(),std::declval<T1&>()))&&
         noexcept(swap(std::declval<T2&>>(),std::declval<T2&>()))&&
          ...

      )

      In the expression above, the identifierswap is looked up in the same manner as the one used by the C++17std::is_nothrow_swappable trait.

      (until C++17)
      1)
      noexcept specification:  
      noexcept((std::is_nothrow_swappable_v<Types>&& ...))
      2)
      noexcept specification:  
      noexcept((std::is_nothrow_swappable_v<const Types>&& ...))
      (since C++17)

      [edit]Example

      Run this code
      #include <iostream>#include <string>#include <tuple> int main(){std::tuple<int,std::string,float> p1{42,"ABCD",2.71}, p2;    p2=std::make_tuple(10,"1234",3.14); auto print_p1_p2=[&](auto rem){std::cout<< rem<<"p1 = {"<< std::get<0>(p1)<<", "<< std::get<1>(p1)<<", "<< std::get<2>(p1)<<"}, "<<"p2 = {"<< std::get<0>(p2)<<", "<< std::get<1>(p2)<<", "<< std::get<2>(p2)<<"}\n";};     print_p1_p2("Before p1.swap(p2): ");    p1.swap(p2);    print_p1_p2("After  p1.swap(p2): ");    swap(p1, p2);    print_p1_p2("After swap(p1, p2): ");}

      Output:

      Before p1.swap(p2): p1 = {42, ABCD, 2.71}, p2 = {10, 1234, 3.14}After  p1.swap(p2): p1 = {10, 1234, 3.14}, p2 = {42, ABCD, 2.71}After swap(p1, p2): p1 = {42, ABCD, 2.71}, p2 = {10, 1234, 3.14}

      [edit]Defect reports

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

      DRApplied toBehavior as publishedCorrect behavior
      LWG 2456C++11thenoexcept specification is ill-formedmade to work

      [edit]See also

      specializes thestd::swap algorithm
      (function template)[edit]
      (C++11)
      swaps the contents
      (public member function ofstd::pair<T1,T2>)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/utility/tuple/swap&oldid=159001"

      [8]ページ先頭

      ©2009-2025 Movatter.jp