а то что можно вызывать delete для указателя на константный объект — не смущает?
константность объекта призвана обеспечить лишь неизменность инварианта, поддерживаемого классом ( и для тех кто в тренде — "потокобезопасность" объекта ), о времени жизни и владении объектом здесь речь не идёт.
Re: Почему легально перемещать константный объект?
Здравствуйте, Abyx, Вы писали:
A>rtfm, std::move ничего не перемещает.
Но для m_values вызовится конструктор перемещения (если такой существует).
В данном случае m_values это std::list у которого нет конструктора перемещения с "const &&" в итоге вызывается простой конструктор копирования.
Если есть желание — найдется 1000 возможностей.
Если нет желания — найдется 1000 причин.
Re[2]: Почему легально перемещать константный объект?
Здравствуйте, antropolog, Вы писали:
A>Здравствуйте, wayfaring, Вы писали:
A>а то что можно вызывать delete для указателя на константный объект — не смущает?
А также вызвать конструктор константного объекта.
Только тут конструктор вызывается для другого объекта.
A>константность объекта призвана обеспечить лишь неизменность инварианта, поддерживаемого классом ( и для тех кто в тренде — "потокобезопасность" объекта ), о времени жизни и владении объектом здесь речь не идёт.
Вы правы. НО! Я даже отвечу вашей фразой: "о времени жизни и владении объектом здесь (в примере топикстартера) речь не идёт"
В случае конструктора перемещения инвариантность неконстантного входного объекта зачастую вкорне меняется а-ля "Было ваше, стало наше".
Страуструп так и написал, "Я не вижу смысла на кой может понадобиться конструктор перемещения от константной ссылки (возможно безумие?), но язык позволяет это делать." (Перевод мой вольный и не точный, призванный донести основную идею)
Если есть желание — найдется 1000 возможностей.
Если нет желания — найдется 1000 причин.
Re[3]: Почему легально перемещать константный объект?