|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
30.07.2017, 20:27 | #41 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
совершенно верно.
ограничение платформы никто не отменял. стек не причем. массив был расположен в статической области памяти (глобальный) аха. думать самостоятельно, зачем использовать знаковые типы для изначально положительных величин. Цитата:
для функции вида: Код:
туда уже нельзя передать отрицательное число. соответственно и диагностировать нечего. если по смыслу предполагается, что допустимы только положительные числа, но ваша функция принимает знаковый аргумент, вам пришлось бы вводить дополнительную проверку на неотрицательность. то бишь вы этим себе только гемморой создаете дополнительный. вся ихняя улучшенная диагностика - это борьба с проблемой, которую они с таким подходом сами же и провоцируют. я уже писал об этом выше. вы же выше писали, что думать нужно своей головой. вот и приведите хотя бы один пример из своей головы, где знаковый индекс может дать профит, пересиливающий издержки на все эти дополнительные проверки, и гемморой связанный с неизбежным конфликтом: сравнение знаковых с беззнаковыми. |
|
30.07.2017, 20:34 | #42 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
я не призываю следовать ни за авторитетами,
ни за не авторитетами. я призываю следовать за здравым смыслом. и в отличие от вас не ссылался на авторитеты. выше вы писали, что нужно думать своей головой. но почему тогда вы до сих пор не смогли из своей головы дать ответ, на казалось бы простой вопрос: "зачем использовать знаковый тип для хранения изначально беззнаковых величин?" проблема разности указателей, как и проблема максимально возможного размера массивов ортогональна этому вопросу. и существует вне зависимости от того, что именно вы используете в качестве индекса. вы не привели мне никакого обоснования. ни одного примера-иллюстрации, где это может дать профит. все, чего мне удалось от вас добиться - ссылки на авторитетов. на Страуструпа и компанию. которые так же не приводят никакого обоснования. их лепет про диагностику ошибок не выдерживает никакой критики. в то время, как с их же лёгкой руки, мы видим: в самом языке и в стандартное библиотеке для беззнаковых величин используются исключительно беззнаковые типы. двойные стандарты? Последний раз редактировалось _Bers; 30.07.2017 в 20:39. |
30.07.2017, 20:50 | #43 |
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
Да уже понятно. Это называется я у мамы особенный.
Призвана предупредить о проблемах использования беззнаковых. Написал же выше - требуется большая осторожность в обращении. Меньший шанс ошибки часто перевешивает любые другие бонусы. Этих конфликтов избежать не удастся. |
30.07.2017, 21:07 | #44 | |
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
У Вас своё мнение, у них своё. Вы их не поняли. А я виноват что ли?
Почему бы не спросить у этих самых авторитетов? Цитата:
Вы написали свой пост, я ему противопоставил текст из гадлайнов и ссылки на людей, знания и опыт которых всем известны. Я не выражал ни своих мыслей, ни своих убеждений. Вы попросили какие-то примеры и объяснений, я привел ссылки в которых также рассказывается о типичных ошибках использования беззнаковых. Из всех этих текстов я сделал краткий вывод текстом. К слову, я сам использую unsigned типы для размеров и индексов, и прекрасно знаю в какую хрень может превратиться код, когда нужна будет и signed и unsigned арифметика, поэтому я прекрасно понимаю о чем говорят авторы в этом плане. Сам я всё равно буду делать так, как считаю нужным (ну или как прикажут). Вы не терпите, когда кто-то думает по-другому? Пытаетесь донести свою "истину" до всех? Все кто с Вами не согласен - пишут бред? Ну и смысл с Вами тогда общаться? |
|
30.07.2017, 21:17 | #45 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
бред - неадекватное поведение.
не соответствующее объективной реальности. нет никаких "проблем беззнаковых", о которых мог бы предупредить знаковый тип. проблемы как раз тогда и возникают, когда используются знаковые. или приведите пример. [/QUOTE] Цитата:
знаковые не являются "более безопасными". заставь дурака богу молиться, он себе лоб расшибет. что со знаковыми, что с беззнаковыми. вы не сможете привести ни одного примера, который иллюстрировал бы опасность беззнаковых в сравнении с знаковым. беззнаковые дадут меньше проблем там, где ожидаются знаковые. я уже приводил пример: вам придется использовать дополнительные проверки. это и есть борьба с проблемой, которую вы сами же и с провоцировали. Код:
в грамотном коде, с использованием грамотных библиотек, обычно не случается. что характерно, профессиональные инструменты, такие как boost (pugixml, expat, еtс) перечислять можно долго. ну так вот, они проблем не создают. максимум с чем сталкивался: ворнинг: unsigned vs size_t (эти типы имеют право иметь различную разрядность, поэтому, компиляторы агрятся точно так же, как при отношениях между знаковыми/беззнакомыми) Саттер - этот вообще агент влияния от Майкрософт. он - член комитета. что же это Страуструп с Саттером втирают одно, а для языка и стандартной библиотеки сделали другое? ваши авторитеты пудрят вам голову. |
|
30.07.2017, 21:43 | #46 | |||
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
и нашел их доводы необоснованными. Цитата:
если не хотите. однако, интересует ваше мнение. а не мнение ханжей. с примерами-иллюстрациями, которые демонстрируют профит. Цитата:
я вот считаю, что они говорят туфту. например вот это: Код:
очевидно, что с беззнаковыми нельзя обращаться так же, как со знаковыми. так глупо влететь может если только школьник, после первой недели изучения языка. от таких ошибок Страуструп призывает защищаться? потому что для людей, которые так глупо влетают, проблема "знаковые/беззнаковые" меньшая из. напротив, я люблю людей, которые думают иначе. более того - именно такие и представляют для меня особый интерес. мне нравится узнавать новое. вопрос лишь в том, чем является это новое? новое может быть полезным. вредным. или бесполезно-глупым. нет. я всего лишь задал вопрос: в чем смысл использовать знаковый тип для величин, которые по смыслу не могут быть отрицательными? а так же привел довод: теперь вам придется постоянно проверять, не является ли число отрицательным, а так же разгребать конфликты знаковых/беззнаковых с той же стандартной библиотекой. а вы стало быть такого мнения обо мне? ну-ну. мне нужно не "согласие/несогласие". мне нужно "обоснование". сейчас я вижу, что вы противопоставляете мне Страуструпвские рекомендации, а сами используете беззнаковые для беззнаковых величин. да и сам Страуструп рекомендует одно, однако ж его страндартная библиотека тоже использует беззнаковые. так с чем тут конкретно можно соглашаться, или не соглашаться? забавно, не правда ли? да я как бе не навязываюсь. люди со мной общаются, потому что находят меня здравомыслящим. |
|||
31.07.2017, 07:07 | #47 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Вот развели то. Проверки так и так будут, что со знаками, что без. Захотите изменить размер коллекции - нужно проверить, что размер > 0 и без разницы знаковый он или нет. При доступе к элементу по индексу тоже будет проверка. Для беззнаковых одна - только на правую границу, для знаковых - две. Со знаковым типом из функции поиска индекса элемента просто можно вернуть -1, если элемента нет. С беззнаковым или кидать исключение или возвращать итератор (тогда нужно, чтобы в итераторе был индекс элемента) или еще как мудрить.
Лично я не вижу, чтобы какой-то из вариантов откровенно был лучше всегда и всюду. Главное - чтобы в целом код был норм, без кастований постоянных и непонятных конструкций. |
31.07.2017, 10:07 | #48 | |||
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
Цитата:
Т.к. отсчет у нас с нуля, то индекс не может быть равен такому числу. Цитата:
Но этот цикл описывает ошибку, а не конкретный случай. Вот так уже не получится: Код:
Но дело в том, что глупые ошибки имеют место быть у всех. Чем меньше мест где их можно совершить, тем лучше. Цитата:
но, очень вероятно, что дальше они будут участвовать в знаковых вычислениях. |
|||
31.07.2017, 22:15 | #49 | ||
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
мой посыл был вот о чем. классическая конструкция уменьшающего цикла для беззнаковых выглядит так: Код:
и станет больше (или равно), чем size. цикл оборвется. подмешивайте в неё любые свои дополнительные условия, если они вам нужны. а они взяли цикл для знаковых. воткнули туда беззнаковые. и потом такие: ай яй яй! смотрите как легко ошибиться! так и хочется сказать: чуваки вы башкой вообще думаете? а то ведь с таким подходом знаковые зафейлят на "беззнаковом цикле". ай яй яй! а знаковые то оказывается ошибки провоцируют! вот были бы беззнаковые, то на беззнаковым цикле бы и не было бы никаких проблем. маразм крепчал в общем. Цитата:
подавляющая часть кейсов вообще беззнаковая. но если где и нужны знаковые, то там обычно знаковые идут во все поля (математические вычисления, например) 99,999% всех конфликтов с которыми я сталкивался: на стыке "сравнение знаковых с беззнаковыми". как раз таки последствие неразумного подхода, когда человек использовал знаковый там, где изначально был нужен беззнаковый. |
||
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Язык Си - массивы | 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 |