C++ named requirements: DefaultConstructible
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Указывает, что экземпляр типа может быть создан по умолчанию.
Содержание |
Требования
Тип
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 |
Смотрите также
|
(C++11)
(C++11)
(C++11)
|
проверяет, имеет ли тип конструктор по умолчанию
(шаблон класса) |
|
(C++20)
|
указывает, что объект типа может быть сконструирован по умолчанию
(концепт) |