Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::ranges::construct_at

      From cppreference.com
      <cpp‎ |memory
       
       
      Memory management library
      (exposition only*)
      Allocators
      Uninitialized memory algorithms
      Constrained uninitialized memory algorithms
      Memory resources
      Uninitialized storage(until C++20)
      (until C++20*)
      (until C++20*)
      Garbage collector support(until C++23)
      (C++11)(until C++23)
      (C++11)(until C++23)
      (C++11)(until C++23)
      (C++11)(until C++23)
      (C++11)(until C++23)
      (C++11)(until C++23)
       
      Defined in header<memory>
      Call signature
      template<class T,class...Args>
      constexpr T* construct_at( T* location, Args&&...args);
      (since C++20)

      Creates aT object initialized with the arguments inargs at given addresslocation.

      Equivalent toifconstexpr(std::is_array_v<T>)
          return::new(voidify (*location)) T[1]();
      else
          return::new(voidify (*location)) T(std::forward<Args>(args)...);
      , except thatconstruct_at may be used in evaluation ofconstant expressions(until C++26).

      Whenconstruct_at is called in the evaluation of some constant expressionexpr,location must point to either a storage obtained bystd::allocator<T>::allocate or an object whose lifetime began within the evaluation ofexpr.

      This overload participates in overload resolution only if all following conditions are satisfied:

      Ifstd::is_array_v<T> istrue andsizeof...(Args) is nonzero, the program is ill-formed.

      The function-like entities described on this page arealgorithm function objects (informally known asniebloids), that is:

      Contents

      [edit]Parameters

      location - pointer to the uninitialized storage on which aT object will be constructed
      args... - arguments used for initialization

      [edit]Return value

      location

      [edit]Notes

      std::ranges::construct_at behaves exactly same asstd::construct_at, except that it is invisible to argument-dependent lookup.

      [edit]Example

      Run this code
      #include <iostream>#include <memory> struct S{int x;float y;double z;     S(int x,float y,double z): x{x}, y{y}, z{z}{std::cout<<"S::S();\n";}     ~S(){std::cout<<"S::~S();\n";} void print()const{std::cout<<"S { x="<< x<<"; y="<< y<<"; z="<< z<<"; };\n";}}; int main(){    alignas(S)unsignedchar buf[sizeof(S)];     S* ptr= std::ranges::construct_at(reinterpret_cast<S*>(buf),42,2.71828f,3.1415);    ptr->print();     std::ranges::destroy_at(ptr);}

      Output:

      S::S();S { x=42; y=2.71828; z=3.1415; };S::~S();

      [edit]Defect reports

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

      DRApplied toBehavior as publishedCorrect behavior
      LWG 3436C++20construct_at could not create objects of array typescan value-initialize bounded arrays
      LWG 3870C++20construct_at could create objects of cv-qualified typesonly cv-unqualified types are permitted

      [edit]See also

      destroys an object at a given address
      (algorithm function object)[edit]
      creates an object at a given address
      (function template)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/memory/ranges/construct_at&oldid=180213"

      [8]ページ先頭

      ©2009-2025 Movatter.jp