Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::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>
      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.

      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]Example

      Run this code
      #include <bit>#include <memory> class S{int x_;float y_;double z_;public:constexpr S(int x,float y,double z): x_{x}, y_{y}, z_{z}{}[[nodiscard("no side-effects!")]]constexprbool operator==(const S&)constnoexcept=default;}; constevalbool test(){    alignas(S)unsignedchar storage[sizeof(S)]{};    S uninitialized=std::bit_cast<S>(storage);std::destroy_at(&uninitialized);    S* ptr= std::construct_at(std::addressof(uninitialized),42,2.71f,3.14);constbool res{*ptr== S{42,2.71f,3.14}};std::destroy_at(ptr);return res;}static_assert(test()); int main(){}

      [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

      allocates uninitialized storage
      (public member function ofstd::allocator<T>)[edit]
      [static]
      constructs an object in the allocated storage
      (function template)[edit]
      (C++17)
      destroys an object at a given address
      (function template)[edit]
      creates an object at a given address
      (algorithm function object)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/memory/construct_at&oldid=180212"

      [8]ページ先頭

      ©2009-2025 Movatter.jp