voidify
From cppreference.com
template< class T > void* voidify( T& obj ) noexcept; |
(説明用*) (C++17 以降 constexpr) |
|
obj のアドレスを(暗黙的に void* に変換して)返します。
目次 |
[edit] Parameters
| obj | - | アドレスを取得するオブジェクト |
[edit] Return value
|
&obj |
(C++11まで) |
|
std::addressof(obj) |
(C++11以降) |
[edit] Notes
この説明専用関数は P0896R4 によって導入されました。未初期化メモリ領域にオブジェクトを構築する 未初期化メモリアルゴリズム の効果を記述するために使用されます。返されたポインタは、配置 new 式の placement-params として使用されます。
当初、戻り値は const_cast<void*>(static_cast<const volatile void*>(std::addressof(obj))) でしたが、これは const 適格性を壊していました。明示的なキャストは LWG issue 3870 の解決によって削除され、残った唯一の変換は void* への暗黙の変換です。
[edit] Defect reports
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 3870 | C++98 | 明示的なキャストが const 適格性を壊していました。 | これらのキャストを削除しました。 |
[edit] See also
| オブジェクトの範囲を未初期化メモリ領域にコピーします (関数テンプレート) | |
| (C++20) |
オブジェクトの範囲を未初期化メモリ領域にコピーします (アルゴリズム関数オブジェクト) |
| 範囲で定義された未初期化メモリ領域にオブジェクトをコピーします (関数テンプレート) | |
| (C++20) |
範囲で定義された未初期化メモリ領域にオブジェクトをコピーします (アルゴリズム関数オブジェクト) |
| (C++17) |
オブジェクトの範囲を未初期化メモリ領域にムーブします (関数テンプレート) |
| (C++20) |
オブジェクトの範囲を未初期化メモリ領域にムーブします (アルゴリズム関数オブジェクト) |
| 範囲で定義された未初期化メモリ領域に、デフォルト初期化によってオブジェクトを構築します (関数テンプレート) | |
| 範囲で定義された未初期化メモリ領域に、デフォルト初期化によってオブジェクトを構築します (アルゴリズム関数オブジェクト) | |
| 範囲で定義された未初期化メモリ領域に、値初期化によってオブジェクトを構築します (関数テンプレート) | |
| 範囲で定義された未初期化メモリ領域に、値初期化によってオブジェクトを構築します (アルゴリズム関数オブジェクト) | |
| (C++20) |
与えられたアドレスにオブジェクトを作成します (関数テンプレート) |
| (C++20) |
与えられたアドレスにオブジェクトを作成します (アルゴリズム関数オブジェクト) |