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>
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++: ??