Здравствуйте, ·, Вы писали:
TB>> ·>Не понял, ты же в мапу ключ кладёшь снаружи. Или мапа копию делает?
TB>> Копию, конечно.
·>А если указатель?
Тогда ключом является адрес. ))
TB>> ·>Скажем, ключом в мапе может быть массив из миллиона элементов... Дальше продолжать?
TB>> Мув-копию.
·>А если массив является ключом в двух разных мапах?
Встроенный массив не имеет операции сравнения, поэтому не может быть ключом.
Речь может идти о некоем типе-обертке над массивом, в котором ты уже сам разбираешь с принципом владения — static-immutable, unique или shared.
·>К сожалению нет. Класс ключа может меняться, добавляться новые поля, например.
Ты намекаешь на отсутствие автоматического распространения константности по указателям и ссылкам?
Есть такое, так же как есть простая возможность распростанять константность и по указателям/ссылкам.
template<typename T>
class Pointer {
T * ptr_;
public:
Pointer(T * ptr = nullptr) : ptr_(ptr) {}
T * operator->() { return ptr_; }
const T * operator->() const { return ptr_; }
};
TB>> а вот итерация по мапе делается регулярно и там проследить за кривыми руками кодера сложнее.
·>Короче, может и есть какие-то средства, работающие в каких-то сценариях, никакой гарантии нет.
Гарантии создаёт программист согласно требуемой семантике, разумеется.
Разумеется, и в джаве и в плюсах можно обеспечить все требуемые гарантии.
Здесь сравнивается цена телодвижений в различных сценариях. ))
Абсолютно все подходы джавы по обеспечению гарантий иммутабельности или константности в плюсах есть, что уже не может дать джаве никакого преимущества в этом вопросе. ))
Но сверху этого в плюсах есть в разы более выразительные механизмы, позволяющие не писать лишний код (не засорять им бинарник).