|
const_cast
|
|||
---|---|---|---|
#18+
Скажите вот читаю про const_cast. написано const_cast позволяет лишить статуса const или volatile переменную . Но такое ощущение , что не совсем ведь так. Рассматривать её как полноценную переменную я не могу , то есть так не отработает во всяком случае в Visual Studio(может в других и даст) : Код: plaintext 1. 2. 3.
а вот так отработает : Код: plaintext 1. 2. 3.
то есть , если мы объявили вот так const int i = 0;, то i можно менять только при помощи указателя ? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 16:04 |
|
const_cast
|
|||
---|---|---|---|
#18+
andron81, Убирать const можно только если известно что там не константа, а иначе UB. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 16:18 |
|
const_cast
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky andron81, Убирать const можно только если известно что там не константа, а иначе UB. Код: plaintext 1. 2. 3.
а вот это UB ? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 16:48 |
|
const_cast
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky andron81, Убирать const можно только если известно что там не константа, а иначе UB. полное задание следующее : "создайте const-массив double и volatile массив double. Переберите все элементы каждого массива в цикле, при помощи оператора const_cast отмените для каждого элемента const и volatile и присвойте ему значение" некорректно поставленная задача , как вы считаете ? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 17:32 |
|
const_cast
|
|||
---|---|---|---|
#18+
andron81некорректно поставленная задача , как вы считаете ? Ещё одна типично бессмысленная учебная задача для того чтобы студент запомнил синтаксис const_cast. Корректности от неё никто бы и не ожидал. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 17:53 |
|
const_cast
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, ясно, спасибо. можно закрывать ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 18:00 |
|
const_cast
|
|||
---|---|---|---|
#18+
andron81 некорректно поставленная задача , как вы считаете ? Обычная учебная задача. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 18:39 |
|
const_cast
|
|||
---|---|---|---|
#18+
petrav andron81 некорректно поставленная задача , как вы считаете ? Обычная учебная задача. вот если бы они просили бы сделать вначале "переменный" массив (не констатный) потом сделать из него констатный и снова переменный и набить значениями вот тогда наверно всё было бы четко. и как ты бы решал это задание ? забил бы на UB ? (решать не надо , просто ответь на вопрос) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 18:43 |
|
const_cast
|
|||
---|---|---|---|
#18+
andron81 и как ты бы решал это задание ? забил бы на UB ? (решать не надо , просто ответь на вопрос) Где UB? Вот вам стартовый массив, начните с него и решайте задачу. Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 19:27 |
|
const_cast
|
|||
---|---|---|---|
#18+
petrav Где UB? UB - при попытке модифицировать конст объект через const_cast. Это прямо в стандарте описано. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 19:51 |
|
const_cast
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky petrav Где UB? UB - при попытке модифицировать конст объект через const_cast. Это прямо в стандарте описано. Ааа... я об этом не подумал. Ну тогда ТС можно начать с этого: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 19:57 |
|
const_cast
|
|||
---|---|---|---|
#18+
petrav Anatoly Moskovsky пропущено... UB - при попытке модифицировать конст объект через const_cast. Это прямо в стандарте описано. Ааа... я об этом не подумал. Ну тогда ТС можно начать с этого: Код: plaintext 1.
это чо ? я задание вроде бы пропечатывал дословно. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 20:40 |
|
const_cast
|
|||
---|---|---|---|
#18+
andron81 petrav пропущено... Ааа... я об этом не подумал. Ну тогда ТС можно начать с этого: Код: plaintext 1.
это чо ? я задание вроде бы пропечатывал дословно. А что не нравится то? Что массив создаётся не const? Ну там же УБ. Ну сделайте так: Код: plaintext 1.
Тут я думаю UB не может возникнуть, а объект константный. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 20:47 |
|
const_cast
|
|||
---|---|---|---|
#18+
petrav andron81 пропущено... это чо ? я задание вроде бы пропечатывал дословно. А что не нравится то? Что массив создаётся не const? Ну там же УБ. Ну сделайте так: Код: plaintext 1.
Тут я думаю UB не может возникнуть, а объект константный. да , не нравится. это уже троллинг ! так и напиши , что это УБ исходя из условия. а то мало того , что ты не понял задание и тебе старожилу этого клуба разживали причем в более понятной форме чем мне новичку, и ты дальше выпендриваешься. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 20:54 |
|
const_cast
|
|||
---|---|---|---|
#18+
andron81, Вы бы вместо того что бы истерить, лучше бы поинтересовались почему там может возникнуть UB? Это нетривиальный вопрос. PS: Какие люди нервные. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 21:23 |
|
const_cast
|
|||
---|---|---|---|
#18+
andron81 Скажите вот читаю про const_cast. написано const_cast позволяет лишить статуса const или volatile переменную . Но такое ощущение , что не совсем ведь так. Рассматривать её как полноценную переменную я не могу , то есть так не отработает во всяком случае в Visual Studio(может в других и даст) : Код: plaintext 1. 2. 3.
Попробуй это: Код: plaintext 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 10:28 |
|
const_cast
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky andron81, Убирать const можно только если известно что там не константа, а иначе UB. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 11:04 |
|
const_cast
|
|||
---|---|---|---|
#18+
rdb_dev Например? Код: plaintext 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 11:31 |
|
const_cast
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky, можно ссылку на пункт стандарта, по которому это UB? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 11:37 |
|
const_cast
|
|||
---|---|---|---|
#18+
rdb_dev Anatoly Moskovsky, можно ссылку на пункт стандарта, по которому это UB? Интереснее почему там UB? Переменной i не существует, а мы от неё адрес взяли и писали туда? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 11:49 |
|
const_cast
|
|||
---|---|---|---|
#18+
petrav, там есть "переменная", которая помечена что она const, но это не значит что она константна по своей сути и находится на защищённой от записи странице памяти. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 11:55 |
|
const_cast
|
|||
---|---|---|---|
#18+
rdb_dev Anatoly Moskovsky, можно ссылку на пункт стандарта, по которому это UB? c++20 9.2.8.1 The cv-qualifiers Any attempt to modify (7.6.19, 7.6.1.5, 7.6.2.2) a const object (6.8.3) during its lifetime (6.7.3) results in undefined behavior. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 11:59 |
|
const_cast
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky, впервые слышу, чтобы объект на стеке нельзя было менять, даже если он декларирован с квалификатором const. Ну да ладно, пусть так - UB... Тем не менее, в следующем примере никакого UB нет: Код: plaintext 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 12:32 |
|
const_cast
|
|||
---|---|---|---|
#18+
rdb_dev Тем не менее, в следующем примере никакого UB нет rdb_dev Код: plaintext 1. 2. 3. 4. 5.
Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 12:53 |
|
const_cast
|
|||
---|---|---|---|
#18+
rdb_devобъект на стеке А с чего ты взял, что он на стеке? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 13:12 |
|
const_cast
|
|||
---|---|---|---|
#18+
rdb_dev впервые слышу, чтобы объект на стеке нельзя было менять, даже если он декларирован с квалификатором const. Никто не говорит что нельзя. Можно. Только результат - UB. Например на одной платформе результат будет успешной модификацией, на другой - успешно, но остальной код будет видеть старое значение, а на третьей будет segfault. Это я описал вполне реальные платформы. Поэтому в стандарте просто записали UB чтобы не привязываться к платформе. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 13:20 |
|
const_cast
|
|||
---|---|---|---|
#18+
a guest rdb_dev Тем не менее, в следующем примере никакого UB нет rdb_dev Код: plaintext 1. 2. 3. 4. 5.
3 A pointer or reference to a cv-qualified type need not actually point or refer to a cv-qualified object, but it is treated as if it does; a const-qualified access path cannot be used to modify an object even if the object referenced is a non-const object and can be modified through some other access path. [ Note: Cv-qualifiers are supported by the type system so that they cannot be subverted without casting. — end note ] 4 Except that any class member declared mutable can be modified, any attempt to modify a const object during its lifetime results in undefined behavior. [ Example: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
a guest Вангую, подразумевалось Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 13:30 |
|
const_cast
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky rdb_dev впервые слышу, чтобы объект на стеке нельзя было менять, даже если он декларирован с квалификатором const. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 13:36 |
|
const_cast
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov rdb_devобъект на стеке По фрагменту в топикстарте нельзя сказать, что объект будет создан именно на стеке. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 13:39 |
|
const_cast
|
|||
---|---|---|---|
#18+
rdb_dev По фрагменту в топикстарте нельзя сказать, что объект будет создан именно на стеке. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 13:43 |
|
const_cast
|
|||
---|---|---|---|
#18+
CEMb, да! Равно как и "куча"... Но я никогда не встречал реализацию разных куч для const и не_const объектов, так, чтобы менеджер кучи создавал копию страницы памяти, на которой выделяется место для нового константного объекта, инициализировал этот объект, затем ставил на страницу защиту от записи и подменял старую страницу виртуальной памяти на новую. Как правило, используется одна единственная куча для всего. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 13:48 |
|
const_cast
|
|||
---|---|---|---|
#18+
rdb_dev Но я никогда не встречал реализацию разных куч для const и не_const объектов В С++20 объекты кучи вообще могут полностью инлайниться на этапе компиляции с помощью constexpr. Например можно работать со строками и векторами полностью в компайл тайм. И в этом смысле такие объекты создаются в другой куче, которой нет в рантайме. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 14:50 |
|
const_cast
|
|||
---|---|---|---|
#18+
цитирую Herb Sutter: автор1.don't use reinterpret_cast; 2.don't use static_cast downcasts. Use dynamic_cast instead; 3.don't use const_cast to cast away const (i.e. at all); 4.don't use C-style (T)expression casts that would perform a reinterpret_cast, static_cast downcast or const_cast. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 14:58 |
|
const_cast
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky В С++20 объекты кучи вообще могут полностью инлайниться на этапе компиляции с помощью constexpr. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 15:20 |
|
const_cast
|
|||
---|---|---|---|
#18+
rdb_devДля создания на куче используется new. Это как-то мешает его обработке в compile-time? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 15:29 |
|
const_cast
|
|||
---|---|---|---|
#18+
rdb_dev Чего угодно, только не "кучи". Для создания на куче используется new. Так я вам и говорю - в C++20 добавили поддержку constexpr new. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 16:11 |
|
const_cast
|
|||
---|---|---|---|
#18+
а как много промышленным кодерам удаётся туда засунуть? (в этап компиляции) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 18:45 |
|
const_cast
|
|||
---|---|---|---|
#18+
автор 2.don't use static_cast downcasts. Use dynamic_cast instead; автор 3.don't use const_cast to cast away const (i.e. at all); автор 4.don't use C-style (T)expression casts ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2020, 06:19 |
|
const_cast
|
|||
---|---|---|---|
#18+
CEMb, Я припоминаю убирал const, в связи с чужими функциями возвращающими const, или желающими указатель на const в параметрах. strstr(), strtol() - примеры таковых. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2020, 07:00 |
|
const_cast
|
|||
---|---|---|---|
#18+
CEMb автор 3.don't use const_cast to cast away const (i.e. at all); ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2020, 09:29 |
|
const_cast
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov rdb_devДля создания на куче используется new. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2020, 09:30 |
|
const_cast
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky rdb_dev Чего угодно, только не "кучи". Для создания на куче используется new. P.S. Предлагаю на "ты". ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2020, 09:33 |
|
|
start [/forum/topic.php?all=1&fid=57&tid=2017325]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
others: | 264ms |
total: | 414ms |
0 / 0 |