Spec-Zone.ru › C++

C++ именованные требования: CopyConstructible

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

Требования

Тип T удовлетворяет CopyConstructible, если

  • Тип T удовлетворяет MoveConstructible, и

Принимая во внимание

  • v, lvalue выражение типа T или const T или rvalue выражение типа const T,
  • u, произвольное идентификатор.

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

Выражение Последующие условия
T u = v; Значение u эквивалентно значению v.

Значение v не изменяется.

T(v) Значение T(v) эквивалентно значению v.

Значение v не изменяется.

Выражение v.~T() также должно быть допустимым, и для lvalue v, выражение &v должно иметь тип T* или const T* и должно возвращать адрес v.

(до C++11)

Примечания

До C++11 классы, перегружающие оператор&, не были CopyConstructible и поэтому не могли использоваться в стандартных контейнерах. Это решение по проектированию в C++98 (а не ошибка, см. LWG issue 390).

С C++11 стандартная библиотека использует std::addressof всякий раз, когда нужен адрес объекта.

См. также

is_copy_constructibleis_trivially_copy_constructibleis_nothrow_copy_constructible
(C++11)(C++11)(C++11)
проверяет, обладает ли тип конструктором копирования
(шаблон класса)
copy_constructible
(C++20)
определяет, что объект типа может быть скопирован и перемещен
(концепция)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/named_req/CopyConstructible

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API