GeezerVison is showing cpprefjp.github.io — std::uninitialized_default_construct_n - cpprefjp C++日本語リファレンス
最終更新日時:
2026年01月06日 12時47分59秒 (JST)
Koichi Murase
が更新
履歴
編集
function template
<memory>
std:: uninitialized_default_construct_n (C++17)
namespace std {
template < class ForwardIterator , class Size >
ForwardIterator
uninitialized_default_construct_n ( ForwardIterator first ,
Size n ); // (1) C++17
template < class ForwardIterator , class Size >
constexpr ForwardIterator
uninitialized_default_construct_n ( ForwardIterator first ,
Size n ); // (1) C++26
template < class ExecutionPolicy , class ForwardIterator , class Size >
ForwardIterator
uninitialized_default_construct_n ( ExecutionPolicy && exec ,
ForwardIterator first ,
Size n ); // (2) C++17
}
概要
未初期化領域の範囲のうち、先頭N個の要素をデフォルト構築する。
未初期化領域の入力イテレータ範囲[first, first + n)の各要素をデフォルト構築する (ゼロ初期化しない)。
効果
以下と等価:
for (; n > 0 ; ( void ) ++ first , -- n )
:: new ( static_cast < void *> ( addressof ( * first )))
typename iterator_traits < ForwardIterator >:: value_type ;
return first ;
例外
呼び出すコンストラクタなどから例外が送出された場合、その例外がこの関数の外側に伝播される前に、その時点で構築済のオブジェクトは全て未規定 の順序で破棄される。すなわち、例外が送出された場合は初期化対象領域は未初期化のままとなる。
備考
std::vector クラスの要素数を変更する操作は、要素を値構築するためゼロ初期化が行われる。その値初期化のコストが気になるような場合に、デフォルト構築することでプログラマの責任で必要な分だけ任意に初期化でき、パフォーマンス向上が期待できるようになる。
例としてBoost Container Libraryのvectorクラスには、要素数を変更するメンバ関数にデフォルト構築のオプションとしてdefault_init がある
例
出力例
1286073336,32742
1286073336,32742
-1,-1
バージョン
言語
処理系
関連項目
参照