Рэндж описывается парой iterator + sentinel. На sentinel меньше требования. По-моему только сравнение с итератором необходимо. Это позволяет, например, написать рэндж для null terminated строки. В этом случае sentinel будет разыменовывать переданный итератор и смотреть значение.
Из минусов пары iterator + sentinel могу назвать то, что такой рэндж потом не запихнешь в контейнер напрмую: они ожидают пару итераторов. А вот for loop умеет работать с такими конструкциями.
ренжи слишком сложны для простого C++ пролитериата. где гарантия того, что за этот сахарок я не буду платить производительностью или временем компиляции?
Временем компиляции конечно и еще как, от этого никуда не деться. Рантаймом не сильно и скорее зависит от задачи, если ты пишешь все лениво и без материализаций на каждом шагу, то можешь и улучшить его
Временем компиляции конечно и еще как, от этого никуда не деться. Рантаймом не сильно и скорее зависит от задачи, если ты пишешь все лениво и без материализаций на каждом шагу, то можешь и улучшить его
В рантайме тоже. Ведь мы же про дебажную сборку говорим? :-)
Но кстати опять же. Даже в дебаге если получилось рейнджами сделать лениво взамен перекладывания меж контейнерами, то все равно будет выигрыш. По сравнению с аналогичными форами и ифами будет оверхед конечно. Так что тут вопрос в применении
Но кстати опять же. Даже в дебаге если получилось рейнджами сделать лениво взамен перекладывания меж контейнерами, то все равно будет выигрыш. По сравнению с аналогичными форами и ифами будет оверхед конечно. Так что тут вопрос в применении
Ну рэнджи в первую очередь как раз заменяют циклы, а не старые стандартные алгоритмы. Во всяком случае для меня сокращение begin(с), end(с) -> с менее интересно по сравнению с возможностью строить выразительную композицию.
так я не спорю. Я как раз готов мириться с оверхедом (а на компил тайм я в целом стараюсь не обращать внимания). Жаль только не все рейнджи завезли в стандарт, даже материализации нет. Но один фиг - рейнджи збс
ренжи слишком сложны для простого C++ пролитериата. где гарантия того, что за этот сахарок я не буду платить производительностью или временем компиляции?
Рэндж описывается парой iterator + sentinel. На sentinel меньше требования. По-моему только сравнение с итератором необходимо. Это позволяет, например, написать рэндж для null terminated строки. В этом случае sentinel будет разыменовывать переданный итератор и смотреть значение.