170 похожих чатов

Господа знатоки, я знаю, вы любите обсуждать стандарт. Вот есть

концепт weakly_incrementable, и есть к нему семантические требования:
Let i be an object of type I. When i is in the domain of both pre- and post-increment, i is said to be incrementable. I models weakly_incrementable<I> only if
- The expressions ++i and i++ have the same domain.
- If i is incrementable, then both ++i and i++ advance i to the next element.
- If i is incrementable, then addressof(++i) is equal to addressof(i).
(https://eel.is/c++draft/iterator.concept.winc#14)
Внимание, вопрос: что значит "advance i to the next element"? Что такое next element для инта, который судя по тому, что его задумано пихать в iota_view, является weakly_incrementable?

23 ответов

85 просмотров

это очень похоже на требование к итераторам, а не к int-ам

Roman-Sandu Автор вопроса
Alex
это очень похоже на требование к итераторам, а не ...

weakly_incrementable это общий концепт, задуманный и для итераторов, и для интов, и для всего на свете

Roman Sandu
weakly_incrementable это общий концепт, задуманный...

"advance i to the next element" = "укажет на один и тот же следующий элемент"? Т.е. у тебя если на входе i = 3, то i++ и ++i вернут 7 (например), но оба

Roman-Sandu Автор вопроса

Это ничего не объясняет. Операторы ++ и определяют, что такое "следующий элемент" для нашего типа. Какая-то циклическая логика

Roman Sandu
Это ничего не объясняет. Операторы ++ и определяют...

чтобы ++а и а++ переключались в одно и то же состояние (внутреннее хранимое значение)?

следующий incrementable элемент в некой последовательности?,.

Roman-Sandu Автор вопроса
Roman Sandu
Это ничего не объясняет. Операторы ++ и определяют...

Это мне напоминает семантическое требование к equality_comparable про то, что если bool(a == b) == true, то a equals b. Долго пытался понять, что тут значит "equals", если не operator==, и наконец-то понял, что имеется в виду value equality, которую программист сам определяет для каждого типа в своей голове

А если дословно закинуть предложение в YYY.translate, то получим осмысленный перевод IMO: Если i является инкрементируемым, то и ++i, и i++ продвигают i к следующему элементу

Roman-Sandu Автор вопроса
Alex
чтобы ++а и а++ переключались в одно и то же состо...

Тогда почему не написано именно так, а используется какая-то загадочная формулировка про advance to the next element?

Roman-Sandu Автор вопроса
Alex
А если дословно закинуть предложение в YYY.transla...

Так, я ищу дискуссии по существу, а не в вопросах перевода английского языка. Понятия "advance" и "next element" нигде в стандарте не определены (либо я не нашёл), хочется понять, как их предполагается интерпретировать

Roman-Sandu Автор вопроса
Roman-Sandu Автор вопроса

Интересно конечно мнение Антона по этому вопросу услышать. Никто не знает, он любит когда его пингуют посреди дня в субботу?

Roman-Sandu Автор вопроса

Нет, не могу успокоится, нужно мнение члена комитета. Была не была, @antoshkka (не стукай пожалуйста). Это ситуация, аналогичная if bool(a == b) == true, then a equals b и каждый программист сам определяет, что такое advance для его типа, так же как и сам определяет equals, или есть всё таки какой-то скрытый смысл?

Roman Sandu
Что такое "последовательность"?

Упорядоченный набор элементов. Это реально вызывает какие-то проблемы в понимании? Или есть конкретный кейс, в котором это определение неоднозначно?

Roman-Sandu Автор вопроса
Max
Упорядоченный набор элементов. Это реально вызыва...

В стандарте не должно быть размытых формулировок с интуитивными пониманием. Если там что-то написано, то должно строго и однозначно интерпретироваться читателем. Можно по-другому вопрос сформулировать, что изменится, если это требование выкинуть?

Roman Sandu
Нет, не могу успокоится, нужно мнение члена комите...

"вообще" каждый сам для себя, конечно но есть нюанс: если ты хочешь, чтобы части стандартной библиотеки, использующие == с твоим типом, не ушли в расколбас и не устроили тебе счастливую сессию в отладчике — есть определенные требования: https://en.cppreference.com/w/cpp/concepts/equality_comparable#Semantic_requirements (а также, чтобы коллеги, которые на это напорются, не пришли к тебе с паяльником)

Roman-Sandu Автор вопроса
Гражданин Котейко
"вообще" каждый сам для себя, конечно но есть нюа...

std::equality_comparable<T> is modeled only if, given objects a and b of type T, bool(a == b) is true if and only if a and b are equal.

Roman Sandu
В стандарте не должно быть размытых формулировок с...

То есть, в принципе не должно быть слов? Любое словесное определение рано или поздно или зациклится, или закончится на интуитивно-понятных сущностях. Если это требование выкинуть, то либо ++i, либо i++ сможет передвинуть i не на следующий элемент в последовательности.

Roman-Sandu Автор вопроса
Roman Sandu
std::equality_comparable<T> is modeled only if, gi...

Вы бы хоть сами свою ссылку прочитали, перед тем как других учить :(

Roman Sandu
Вы бы хоть сами свою ссылку прочитали, перед тем к...

вы хотите чтобы стандарт включал в себя заодно половину толкового словаря?

Roman-Sandu Автор вопроса
Гражданин Котейко
вы хотите чтобы стандарт включал в себя заодно пол...

А вам очевидно определение слова "equals"? Математики уже 200 лет пытаются понять, что оно значит, и все никак 😢

какие буквы в "вообще каждый сам для себя, но есть ограничивающие условия" вам не понятны?

Roman-Sandu Автор вопроса
Гражданин Котейко
какие буквы в "вообще каждый сам для себя, но есть...

Я прочитал ваше сообщение так, что каждый для себя определяет operator==, а не слово equals. Но даже если наоборот, стандарт требует, чтобы эти понятия совпадали, но не определяет второго из них. Мне кажется, это дефект стандарта, и так писать не следует

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта