@ProCxx

Страница 1094 из 2477
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
И выбросил бы либу

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
Я так понимаю ты это имел ввиду ?
https://wandbox.org/permlink/rtzCT2W6xD4z9105 так или я что-то упустил?

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
https://wandbox.org/permlink/rtzCT2W6xD4z9105 так или я что-то упустил?
То что все скомпилировалось не говорит о том что все в рамках стандарта.

Constantine
15.07.2017
21:16:22
Существует, пруфы я конечно так просто не найду уже, но у товарища из Яндекса была именно такая ситуация. Он кстати заядлый олимпиадник - Петр Калинин
Хм... не очень знаю, кто это. Я хочу увидеть пример кода, причину возврата const T, проблемный компилятор и цитаты стандарта. В частности, я почти уверен, что в данном случае const вообще не влияет на генерируемый код

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
Почитать можно тут: https://stackoverflow.com/questions/37418387/const-cast-and-stdmove-to-remove-constness-from-non-reference
Вам накидать три десятка принципиально ошибочных ответов на стек оверфлоу?

В тексте нет ссылок на стандарт

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
Собственно говоря я могу дать простой ответ, почему это не может быть UB
Дело все в том, что возвращенный объект не мог быть создан как const

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

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


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
собственно Антон Полухин утверждал, что все компиляторы просто игнорируют const :)
а я вот не верю, потмоу что он не разрабатывал все компиляторы

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

Google
Ioann V
15.07.2017
21:50:36
собственно Антон Полухин утверждал, что все компиляторы просто игнорируют const :)
Это мб если речь о интел архитектуре идет. А если плисы и всякие другие arm ?

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
В данном случае объект не мог быть const изначально
мог.... есть пару специфичных надуманных кейсов

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
в плюсах все безумно хорошо с логикой языка

Страница 1094 из 2477