![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#31 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]() Цитата:
что бы понимать: размер массива не может быть отрицательным. в qt вообще многое через одно место сделано. |
|
![]() |
![]() |
![]() |
#32 |
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
![]() |
![]() |
![]() |
![]() |
#33 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]() Цитата:
хотелось бы где нибудь более развернутый ответ-подтверждение их тезиса. про диагностику ошибок - это бред. они собрались диагностировать ошибки, которых вообще не было бы, не используй они знаковых там, где их быть не должно по смыслу. это называется самому себе создать проблему. а потом героически её решать. |
|
![]() |
![]() |
![]() |
#34 | |
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
![]() Цитата:
Например, разница двух указателей - ptrdiff_t, т.е. тип знаковый, скорее всего, по размеру это знаковый size_t. То есть, создав массив с количеством элементов большим, чем влезит в тип ptrdiff_t, то, очевидно, получаем проблему. Многие реализации просто не дают создать массив c количеством элементов больше, чем влезит в ptrdiff_t. Итого, у нас есть размер с size_t, но использовать его мы не можем по полной. Например, многие реализации векторов/строк основаны на трех указателях, и определяют размер как Код:
Последний раз редактировалось Croessmah; 30.07.2017 в 17:37. |
|
![]() |
![]() |
![]() |
#35 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]() Цитата:
зависящие от реализации ограничения на размеры различных контейнеров. но их не существует для массивов. стандарт говорит, что в случае переполнения ptrdiff_t, поведение не определено. |
|
![]() |
![]() |
![]() |
#36 | |
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
![]() Цитата:
Лично я вопросы использования signed/unsigned решаю для каждого конкретного случая отдельно. Слепое следование какому-то одному правилу только навредит. |
|
![]() |
![]() |
![]() |
#37 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]() Цитата:
это - не проблема знаковости/беззнаковости индексов для массивов. это - проблема адресной арифметики указателей вообще. тут ещё нужно постараться сделать так, что бы вообще нарваться на переполнение ptrdiff_t вот смотрите, я использовал даже не std::size_t, а unsigned причем, даже не максимальный: Код:
Код:
Код:
Код:
чем просто переполнение ptrdiff_t фактически, всплывают нюансы, которые не дают нам спокойно работать с большими массивами. в таком ключе можно сказать, что и какого нибудь 16 битного инта будет за глаза. но если так, то это должен быть беззнаковый 16 битный инт. речь не о слепом следовании правилам. а о здравом смысле. |
|
![]() |
![]() |
![]() |
#38 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]() Цитата:
что об этом думает Страуструп и Ко. не помню, что бы они хоть как то раскрыли бы этот момент. весьма примечательно, что язык с++ противоречит их собственным рекомендациям. стандарт говорит: в качестве типа данных для индексов массива используется std::size_t это называется: "давайте юзать для индексов std::size_t, а всем остальным скажем: юзайте инт" худшее, что может сделать мыслящий человек, это слепо следовать за авторитетами. |
|
![]() |
![]() |
![]() |
#39 | |||
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
![]() Цитата:
а теперь пишите, что этого еще нужно добиться. Цитата:
Цитата:
Кстати, вот еще глупцы такие же правила написали в Google C++ Style Guide: https://google.github.io/styleguide/...#Integer_Types Люди, не дружащие со здравым смыслом (среди них Александресску, Саттер, Страуструп, Майерс и т.д.), тоже говорят о том же самом: https://www.youtube.com/watch?v=Puio5dly9N8#t=733 Danger – unsigned types used here! Why are unsigned integers error prone? Если просто обобщить, то увеличивается число возможных ошибок, поэтому обращение с беззнаковыми числами требует больших усилий и большей осторожности. Но это относится к любому аспекту языка, который чреват ошибками, например, голым указателям. |
|||
![]() |
![]() |
![]() |
#40 | |
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
![]() Цитата:
![]() Последний раз редактировалось Croessmah; 30.07.2017 в 19:34. |
|
![]() |
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Язык Си - массивы | leonid_spartak | Помощь студентам | 1 | 12.05.2017 09:30 |
Массивы.Язык Си | Caca0 | Помощь студентам | 26 | 05.02.2013 00:10 |
массивы. язык СИ. | skauzer_blr | Помощь студентам | 8 | 10.04.2012 22:15 |
Массивы, язык - C. | xcyber | Помощь студентам | 9 | 19.10.2009 21:38 |
Массивы (язык С++) | Ноберт | Помощь студентам | 3 | 24.08.2009 23:10 |