Ответ 1
Скопировать назначение одной карты в другую требует копирования каждого элемента. Поскольку вы не можете копировать элементы, вы не можете копировать-назначать карты.
Является ли фактический объект карты пустым во время выполнения, является несущественным, поскольку они являются чисто статическими соображениями, полностью определяемыми типами объектов.
(Мне нравится спрашивать, почему sin(0)
требуется единица с плавающей точкой, когда результат является целым числом.)
Перемещение всей карты, с другой стороны, прекрасно, потому что контейнер имеет node и фактические значения не изменяются, а только узлы. Фактически, контейнеры, основанные на перемещении или перемещении, на основе node не требуют, чтобы элементы были подлежащими перепрограммированию или перемещению или присваиванию вообще.
(Это должно быть верно для всех контейнеров, которые управляют динамической памятью подходящим образом, например, через std::allocator<value_type>
, но это, конечно, не соответствует действительности для std::array
, и было бы интересно, будет или нет он будет придерживаться std::dynarray
, и, как заметил Джонатан Вакли, если схема распределения не способна переместить узлы оптом.)