最終更新日時: 2025年09月26日 00時38分13秒 (JST)
Raclamusi が更新

履歴 編集

function template
<memory>

# std::start_lifetime_as_array(C++23)

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

## 関連項目

- `std::start_lifetime_as`

## 参照

- P2590R2: Explicit lifetime management
- P2679R2: Fixing std::start_lifetime_as and std::start_lifetime_as_array