Здравствуйте и хорошего вам дня.
Верно ли это (требуется по стандарту), что стандартный класс C ++ std::map<Key, Value>
должен иметь следующие свойства:
- Может работать, если Значение не имеет
operator=
или operator=
является личным (и std::map
не является личным другом Значение ).
- Может работать, если Значение не имеет конструктора по умолчанию или конструктор по умолчанию является закрытым (и
std::map
не является частным другом Значение )
Почему я спрашиваю - меня попросили написать замену для класса, который внутренне использовал std :: map. В процессе оказалось, что класс должен работать без operator=
(до тех пор, пока вы избегаете map[key] = value;
). Я обстрелял требование operator=
, но оказалось, что использование конструкторов по умолчанию для Value также вызывало некоторые проблемы (o_O), потому что класс, который должен был быть Value , не имел конструкторов по умолчанию , Итак ... это стандартные свойства std::map
, или исходный класс полагался на специфичное для реализации / неопределенное поведение? Я проверил «Стандарт C ++ - ANSI ISO IEC 14882 2003» и не смог найти ни одного из таких требований. Я, вероятно, могу также указать «требование конструктора по умолчанию» (пока пользователь избегает определенных вызовов, таких как вызов map[key]
для несуществующего ключа), но я, конечно, не слышал о таких свойствах std :: map раньше .. .
Так ... что ты думаешь?