Namespaces
Variants

C++ named requirements: DefaultConstructible

From cppreference.net
C++ named requirements

Указывает, что экземпляр типа может быть создан по умолчанию.

Содержание

Требования

Тип T удовлетворяет требованиям DefaultConstructible если все следующие утверждения и выражения допустимы и имеют указанные эффекты:

Выражение/Оператор Постусловие
T u ; Объект u является default-initialized .
T u { } ; Объект u является value-initialized или aggregate-initialized .
T ( )

T { }

Временный объект типа T является value-initialized или aggregate-initialized .

Примечания

Для объектов типа неагрегатного класса должен быть определён публичный конструктор по умолчанию (либо пользовательский, либо неявно определённый), чтобы удовлетворить требованиям DefaultConstructible .

Не-const объекты неклассового объектного типа всегда являются DefaultConstructible .

Константные неклассовые типы не являются DefaultConstructible .

Константные агрегированные типы не являются DefaultConstructible если любой из их членов представляет собой объект неклассового типа.

Необъектные типы (типы функций, ссылочные типы и (возможно cv-квалифицированный) тип void ), а также константные необъектные типы никогда не являются DefaultConstructible .

Отчеты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Applied to Behavior as published Correct behavior
LWG 724 C++98 the requirements of DefaultConstructible were missing added
LWG 2170 C++98 initialzing an object of a DefaultConstructible type with an
empty initializer could only result in value-initialization
can also lead to
aggregate-initialization

Смотрите также

проверяет, имеет ли тип конструктор по умолчанию
(шаблон класса)
указывает, что объект типа может быть сконструирован по умолчанию
(концепт)