|
что хотят в этой задаче ???
|
|||
---|---|---|---|
#18+
Эккель который Брюс. задача от туда . Текст : Определить массив типа int. получить начальный адрес массива и привести его к типу void* при помощи static_cast. Написать функцию , в аргументах которой передаются *void, число (количество байт) и значение. Функция должна присваивать передаваемое значение каждому байту в заданном интервале. Протестировать функцию на массиве int. 1. верно ли я понял суть задачи, реализовав следующим образом ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
если верно , то какой смысл перегонять это сначало в void * ??? Можно ведь сразу передать как int *. или может есть смысл сначала в void * ? или автор просто хочет показать , что можно перегнать в void * , а потом обратно преобразовать в исходный ? 2. в чем смысл предостережений использования всяких там staic_cast, reintepret_cast, dynamic_cast ? скажем Эккель пишет: static_cast это для безопасного или более менее безопасного приведения, включая то которое может быть выполнено неявно. а скажем reintepret_cast самый опасный из всех видов приведений. так в чем их опасность то у всех ? что я например потеряю дробную часть, переводя из float в int , ну так я в курсе этого. или что-то ещё ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 13:35 |
|
что хотят в этой задаче ???
|
|||
---|---|---|---|
#18+
andron81или автор просто хочет показать , что можно перегнать в void * , а потом обратно преобразовать в исходный Или не в исходный. Да,именно так, типичная учебная задача на освоение новой техники. В данном случае - приведения типов. andron81так в чем их опасность то у всех ? В багах, которые они могут породить или замаскировать. На пальцах не объяснить, приходит с опытом многодневной отладки. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 13:42 |
|
что хотят в этой задаче ???
|
|||
---|---|---|---|
#18+
смысл перегонять это сначало в void * ??? Dimitry Sibiryakov Да,именно так, типичная учебная задача на освоение новой техники. В данном случае - приведения типов. а ты знаешь , прикол в том , что передавать int * не выйдет, каст_статик забракует : Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 13:54 |
|
что хотят в этой задаче ???
|
|||
---|---|---|---|
#18+
andron81смысл перегонять это сначало в void * ??? Чтобы в жидких мозгах студентов выкристаллизовалось умение пользоваться static_cast. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 14:32 |
|
что хотят в этой задаче ???
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, со статиком не выйдет иначе. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 15:19 |
|
что хотят в этой задаче ???
|
|||
---|---|---|---|
#18+
У некоторых студентов мозги настолько жидкие, что точка насыщения для кристаллизации так и не образовывается. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 15:23 |
|
что хотят в этой задаче ???
|
|||
---|---|---|---|
#18+
andron81, Опасность reintepret_cast в том, что не все преобразования в нем разрешены, но часть тех которые запрещены (например из-за алиасинга) описаны в стандарте как Undefined Behavior(UB), и компилятор не обязан выдавать ошибку (в отличии от static_cast). Т.е. будет UB, а вы даже не узнаете, пока где-то что-то крашнется (в лучшем случае). ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 17:29 |
|
что хотят в этой задаче ???
|
|||
---|---|---|---|
#18+
Хотя вот в соседней теме выяснили что и static_cast может подгадить ) https://www.sql.ru/forum/1329465/pochemu-ya-tut-ne-mogu-zamenit-reinterpret-cast-na-static-cast ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 17:37 |
|
что хотят в этой задаче ???
|
|||
---|---|---|---|
#18+
Anatoly MoskovskyОпасность reintepret_cast в том, что не все преобразования в нем разрешены Точнее я бы сказал, что особо опасен он тем, что некоторая часть разрешённых преобразований выполняется не совсем так как ожидает наивный кодописатель. Именно поэтому явные преобразования следует избегать насколько это только возможно. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 18:05 |
|
что хотят в этой задаче ???
|
|||
---|---|---|---|
#18+
andron81, это попытка научить студентов изобретать велосипед типа memset ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 18:56 |
|
что хотят в этой задаче ???
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, а во ,пожалуйста, мне подсказали где искать баги . int x = 0x7ffffff; //134217727 float y = static_cast<float>(x); //134217728. преобразования явные . и как с этим бороться ??? ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 22:30 |
|
что хотят в этой задаче ???
|
|||
---|---|---|---|
#18+
andron81и как с этим бороться ??? ))) Легко: никогда не использовать явные преобразования типов без точного понимания зачем и почему. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 00:12 |
|
что хотят в этой задаче ???
|
|||
---|---|---|---|
#18+
andron81, Я считаю что суть задачи вы поняли верно. Условие <= N-1 выглядит необычно, обычно пишут <N Смысл преобразования в void* , чтобы функцию было удобно вызывать без каста на любом объекте. finc( &x, sizeof(x), 0). Обнулит память переменной x для любого типа. Посмотрите memset () в stdlib.h ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 00:51 |
|
что хотят в этой задаче ???
|
|||
---|---|---|---|
#18+
> чем смысл предостережений использования всяких там staic_cast, reintepret_cast, dynamic_cast ? Это разные виды молотков. Один для подгонки, другой для рихтовки. Reinterpret_cast это вообще кувалда, которая редко нужна. Каждый каст увеличивает риск ошибки, поэтому если нужен молоток, начинайте с менее опасных. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 01:01 |
|
|
start [/forum/topic.php?fid=57&fpage=6&tid=2017327]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
28ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 277ms |
total: | 400ms |
0 / 0 |