Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::ref,std::cref

      From cppreference.com
      <cpp‎ |utility‎ |functional
       
       
      Utilities library
       
      Function objects
      Function invocation
      (C++17)(C++23)
      Identity function object
      (C++20)
      Old binders and adaptors
      (until C++17*)
      (until C++17*)
      (until C++17*)
      (until C++17*)  
      (until C++17*)
      (until C++17*)(until C++17*)(until C++17*)(until C++17*)
      (until C++20*)
      (until C++20*)
      (until C++17*)(until C++17*)
      (until C++17*)(until C++17*)

      (until C++17*)
      (until C++17*)(until C++17*)(until C++17*)(until C++17*)
      (until C++20*)
      (until C++20*)
       
      Defined in header<functional>
      template<class T>
      std::reference_wrapper<T> ref( T& t)noexcept;
      (1)(since C++11)
      (constexpr since C++20)
      template<class T>

      std::reference_wrapper<T>

          ref(std::reference_wrapper<T> t)noexcept;
      (2)(since C++11)
      (constexpr since C++20)
      template<class T>
      void ref(const T&&)= delete;
      (3)(since C++11)
      template<class T>
      std::reference_wrapper<const T> cref(const T& t)noexcept;
      (4)(since C++11)
      (constexpr since C++20)
      template<class T>

      std::reference_wrapper<const T>

          cref(std::reference_wrapper<T> t)noexcept;
      (5)(since C++11)
      (constexpr since C++20)
      template<class T>
      void cref(const T&&)= delete;
      (6)(since C++11)

      Function templatesref andcref are helper functions that generate an object of typestd::reference_wrapper, usingtemplate argument deduction to determine the template argument of the result.

      T may be an incomplete type.

      (since C++20)

      Contents

      [edit]Parameters

      t - lvalue reference to object that needs to be wrapped or an instance ofstd::reference_wrapper

      [edit]Return value

      1)std::reference_wrapper<T>(t)
      2)t
      4)std::reference_wrapper<const T>(t)
      5)t
      3,6) rvalue reference wrapper is deleted.

      [edit]Example

      Run this code
      #include <functional>#include <iostream> void f(int& n1,int& n2,constint& n3){std::cout<<"In function: "<< n1<<' '<< n2<<' '<< n3<<'\n';++n1;// increments the copy of n1 stored in the function object++n2;// increments the main()'s n2// ++n3; // compile error} int main(){int n1=1, n2=2, n3=3;std::function<void()> bound_f=std::bind(f, n1, std::ref(n2), std::cref(n3));    n1=10;    n2=11;    n3=12;std::cout<<"Before function: "<< n1<<' '<< n2<<' '<< n3<<'\n';    bound_f();std::cout<<"After function: "<< n1<<' '<< n2<<' '<< n3<<'\n';}

      Output:

      Before function: 10 11 12In function: 1 11 12After function: 10 12 12

      [edit]Defect reports

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

      DRApplied toBehavior as publishedCorrect behavior
      LWG 3146C++11unwrapping overloads sometimes led to errormade always valid

      [edit]See also

      CopyConstructible andCopyAssignable reference wrapper
      (class template)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/utility/functional/ref&oldid=173641"

      [8]ページ先頭

      ©2009-2025 Movatter.jp