108 / 108 / 23
Регистрация: 21.03.2010
Сообщений: 445
|
||||||
1 | ||||||
Квалификатор const: пояснить механику работы указанного кода15.11.2017, 15:19. Показов 1447. Ответов 15
0
|
|
15.11.2017, 15:19 | |
Ответы с готовыми решениями:
15
Квалификатор const
Каким образом реализуется квалификатор const?
|
119 / 9 / 2
Регистрация: 06.09.2017
Сообщений: 82
|
|
15.11.2017, 15:21 | 2 |
![]() Решение
0
|
108 / 108 / 23
Регистрация: 21.03.2010
Сообщений: 445
|
|
15.11.2017, 15:40 [ТС] | 3 |
это не пояснение а две буквы
0
|
119 / 9 / 2
Регистрация: 06.09.2017
Сообщений: 82
|
|
15.11.2017, 15:55 | 4 |
0
|
108 / 108 / 23
Регистрация: 21.03.2010
Сообщений: 445
|
|
15.11.2017, 15:57 [ТС] | 5 |
Так, и в какой момент справоцировано непоределённое поведение? я присваиваю указателю значение, я присваиваю значение в валидную область памяти. что не так? где запрещенная операция?
0
|
322 / 174 / 78
Регистрация: 09.10.2014
Сообщений: 809
|
||||||
15.11.2017, 17:02 | 6 | |||||
Компилятор оптимизировал код и подставил unchangable везде, где только смог думая, что она меняться не будет.
Добавлено через 2 минуты Так делать нельзя.
0
|
зомбяк
1582 / 1216 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
|
|
15.11.2017, 17:34 | 7 |
Почему в валидную?
&unchangable - адрес невалидной области памяти с точки зрения записи в неё. И совершенно не важно, const-указатель содержит его или не-const указатель.
0
|
108 / 108 / 23
Регистрация: 21.03.2010
Сообщений: 445
|
|
15.11.2017, 18:28 [ТС] | 8 |
почему нельзя-то? я сделал, всё закомпилировалось.
Логично. То есть я всё-таки изменил данные в памяти, просто за счет невалидности операции в cout попали данные не из unchangable?
0
|
119 / 9 / 2
Регистрация: 06.09.2017
Сообщений: 82
|
|
15.11.2017, 18:40 | 9 |
0
|
зомбяк
1582 / 1216 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
|
|
15.11.2017, 18:46 | 10 |
изменил какие-то данные, но где, и что от этого могло сломаться, неизвестно. Именно потому и undefined behavior .
В общем случае это может привести на n-ом запуске к вылету программы, когда операционная система вдруг увидит, что кто-то перезаписал память, которая не должна перезаписываться, во время выполнения этой программы.
0
|
1369 / 592 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
|
|
16.11.2017, 01:00 | 11 |
Нет там UB.
Вы и не ссылались *c.ptr на unchangable А если бы сослались, код бы просто не скомпилировался.
0
|
![]() 8737 / 4315 / 960
Регистрация: 15.11.2014
Сообщений: 9,762
|
|
16.11.2017, 01:19 | 12 |
есть.
адрес какой ячейки памяти по вашему хранился в тот момент в объединении?
1
|
1369 / 592 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
|
||||||
16.11.2017, 01:31 | 13 | |||||
Ясно. Ок. Есть.
Добавлено через 6 минут Это тоже?
0
|
438 / 430 / 159
Регистрация: 21.05.2016
Сообщений: 1,338
|
|
16.11.2017, 02:15 | 14 |
0
|
зомбяк
1582 / 1216 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
|
|
16.11.2017, 02:19 | 15 |
c.b = 300; и использовать c.a тоже нельзя. Получается что union Caster в рамках "полностью определённого поведения" оказывается в этом смысле одноразовой.
0
|
![]() 8737 / 4315 / 960
Регистрация: 15.11.2014
Сообщений: 9,762
|
|
16.11.2017, 02:31 | 16 |
0
|
16.11.2017, 02:31 | |
Помогаю со студенческими работами здесь
16
Пояснить результат работы кода Объяснить алгоритм работы указанного кода
Пояснить про const в возвращаемом типе функции Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |