У меня есть кольцевой буфер, в котором хранится индекс начала и конца в виде целочисленного значения без знака. Согласно этому источнику, достаточно выполнить перенос только при получении индексов и просто позволить поведению uint позаботиться о переносе по uint_MAX. Это справедливо для всех реализаций или я полагаюсь на неопределенное поведение?
Демо
#include
#include
#include
int main()
{
size_t max = std::numeric_limits::max();
size_t head = max - 5;
size_t tail = max + 5;
size_t len = tail - head;
std::cout
Подробнее здесь: https://stackoverflow.com/questions/786 ... d-and-tail