
Constantine
15.07.2017
21:00:33
Я бы в данном случае без зазрения совести написал const_cast

Ioann V
15.07.2017
21:00:43
Желательно без использования google

Constantine
15.07.2017
21:00:59
И выбросил бы либу

Berkus
15.07.2017
21:01:17

Google

Ioann V
15.07.2017
21:01:19
UB
Я бы в данном случае без зазрения совести написал const_cast

Constantine
15.07.2017
21:01:25
?

Ioann V
15.07.2017
21:01:39
Конст каст дает уб. Так как если объект был изначально константой
То ... ну вы думаю знаете :)

Constantine
15.07.2017
21:02:03
Вопрос недостаточно специфицирован
Что значит объект изначально был константой?

Berkus
15.07.2017
21:02:25

Constantine
15.07.2017
21:02:52
+1
я не представляю, как здесь можно получить UB

Владислав
15.07.2017
21:03:47
Я тоже не понял, зачем возвращать const T, ладно бы это референс был или ссылка, но либа возвращающая мне константный объект...

Constantine
15.07.2017
21:03:48
здесь нет ссылки
вот если возврат идет T const& то const_cast может дать UB, я понимаю

Google

Ioann V
15.07.2017
21:05:22
return const_cast<C&&>
Я так понимаю ты это имел ввиду ?
Так как конструктор копирования у нас delete
В таком случае это действительно UB.
Но у этой задачи в реальности есть решение :) Без UB
В общем, что бы вас не томить рассказываю
Можно создать некоторую структур обертку - у которой будет mutable поле
Ну и через этот mutable делать возврат
Тоесть так: struct S{ mutable C a;}
А в функции писать так: return f<S>().a

Constantine
15.07.2017
21:11:34
Этой задачи не существует
Помечать возвращаемое значение как const это что-то между моветон и ошибка
Любой пример
Цитаты из стандарта

Berkus
15.07.2017
21:12:53

Ioann V
15.07.2017
21:14:02
Существует, пруфы я конечно так просто не найду уже, но у товарища из Яндекса была именно такая ситуация. Он кстати заядлый олимпиадник - Петр Калинин

Like
15.07.2017
21:14:04
Дорога к С++20
https://habrahabr.ru/post/333414/

Ioann V
15.07.2017
21:14:42

Constantine
15.07.2017
21:16:22

Google

Ioann V
15.07.2017
21:16:33
У меня например компилится вот такое struct S{ std vector<S> V }
Почитать можно тут: https://stackoverflow.com/questions/37418387/const-cast-and-stdmove-to-remove-constness-from-non-reference

Alexander
15.07.2017
21:32:50
http://my.safaribooksonline.com/9781787282247?utm_content=buffer6fb4f&utm_medium=social&utm_source=twitter.com&utm_campaign=buffer
https://herbsutter.com/2017/07/15/trip-report-summer-iso-c-standards-meeting-toronto/

Stanislav
15.07.2017
21:35:52

Constantine
15.07.2017
21:38:18
В тексте нет ссылок на стандарт

Ioann V
15.07.2017
21:40:01
Да все возможно. Наверное, это следовало бы сделать мне, ибо уже проделывал. Но мне лень :)

Constantine
15.07.2017
21:40:34
Собственно говоря я могу дать простой ответ, почему это не может быть UB
В любом случае весь вопрос в том, какой смысл вкладывал автор в написанное const

Ioann V
15.07.2017
21:43:18
Ну самое простое это призвать сюда чуваков из pvs studio

Constantine
15.07.2017
21:43:29

Alexander
15.07.2017
21:43:55
я что-то пропустил

Constantine
15.07.2017
21:44:09

Ioann V
15.07.2017
21:44:49
Константность объекта мягко говоря для компилятора говорит лишь в какую память он может записать данный объект
Я думаю, что ub как раз да, когда внутри мк будет что то интересное происходить

Alexander
15.07.2017
21:47:28
так-так

Google

Alexander
15.07.2017
21:47:47
перемещение константного обьекта
крайне интересно
и это разве не UB?

Ioann V
15.07.2017
21:48:05

Constantine
15.07.2017
21:48:19

Alexander
15.07.2017
21:48:27
именно

Constantine
15.07.2017
21:48:31
Кроме того, что объект нельзя менять
Это все ответы на стек оверфлоу

Alexander
15.07.2017
21:48:45

Admin
ERROR: S client not available

Alexander
15.07.2017
21:48:58
и он на основании этого может применять оптимизации

Constantine
15.07.2017
21:49:14
он никогда так не сделает
потому что этой гарантией нельзя воспользоваться

Ioann V
15.07.2017
21:49:39
Вот честно скажу, я как то собеседовался в некоторве места - и такие надуманные ситуации спрвшивали, что волосы дыбом вставали. Но к счастью я неплохо тогда задротил стандарт :)

Alexander
15.07.2017
21:49:48

Constantine
15.07.2017
21:49:54
собственно Антон Полухин утверждал, что все компиляторы просто игнорируют const :)

Alexander
15.07.2017
21:50:19

Constantine
15.07.2017
21:50:21

Alexander
15.07.2017
21:50:29
и никто не знает, что твоится в недрах того же IntelC++

Google

Ioann V
15.07.2017
21:50:36

Constantine
15.07.2017
21:50:37
В данном случае объект не мог быть const изначально

Alexander
15.07.2017
21:50:52
Вообще, зачем там автоор const написал - это совсем другая непонтяная и мне тоже история

Constantine
15.07.2017
21:50:57
Именно
Но
Автор в любом случае не мог создать этот объект как const

Alexander
15.07.2017
21:51:09

Constantine
15.07.2017
21:51:13
Не мог
ну или пример кода, я не представляю его

Alexander
15.07.2017
21:51:32
что не мог?

Constantine
15.07.2017
21:51:32
он должен вернуть const T

Alexander
15.07.2017
21:51:37
ага

Constantine
15.07.2017
21:51:40
заметь

Alexander
15.07.2017
21:51:44
да я не про автора код вообще

Constantine
15.07.2017
21:51:47
для не CC типа
я понимаю, что const& нельзя консткастить и модифицировать
потому что 2 можно передать по const&
но здесь речь идет о user-defined не CC типе
я не понимаю даже как его вернули из функции, если он был объявлен как const внутри функции
в любом случае возвращаемое значение функции по сути возвращено по ссылке

Ioann V
15.07.2017
21:53:37
Самая моя большая ошибка при изучении плюсов была в том, что я пытался найти логику

Constantine
15.07.2017
21:53:56
в плюсах все безумно хорошо с логикой языка