namespace std {
template <class T>
T* start_lifetime_as_array(void* p, size_t n) noexcept; // (1)
template <class T>
const T* start_lifetime_as_array(const void* p, size_t n) noexcept; // (2)
template <class T>
volatile T* start_lifetime_as_array(volatile void* p, size_t n) noexcept; // (3)
template <class T>
const volatile T* start_lifetime_as_array(const volatile void* p, size_t n) noexcept; // (4)
}
概要
配列オブジェクトの生存期間を開始することを明示する。
要件
T が完全型であること。
事前条件
pが、型Tの配列のアライメントを満たすこと。または、pがnullであること。n <= size_t(-1) / sizeof(T)が真であること。n > 0が真ならば、[(char*)p, (char*)p + (n * sizeof(T)))の範囲がpを通じてアクセス可能な領域であること。
効果
n > 0 が真ならば、サイズ n の T の配列の型を U とすると、start_lifetime_as<U>(p) と同じ効果。そうでなければ、何もしない。
戻り値
n > 0 が真ならば、暗黙的に構築されたサイズ n の T の配列の、最初の要素へのポインタを返す。そうでなければ、p。
例外
投げない。
例
#include <cstdint>
#include <memory>
#include <iostream>
int main() {
float f = 3.14f;
std::uint16_t* n = std::start_lifetime_as_array<std::uint16_t>(&f, 2);
std::cout << n[0] << " " << n[1] << std::endl;
}
出力
62915 16456
バージョン
言語
- C++23
処理系
- Clang: ??
- GCC: ??
- Visual C++: ??