Здравствуйте, rusted, Вы писали:
R>Здравствуйте, Аноним, Вы писали:
А>>4. STL-контейнеры провоцируют использование size_t. Беззнаковость этого типа влечёт проблемы.
R>проблемы влечет не сама беззнаковость size_t, а непоследовательность в использовании типов. и количество элементов в контейнере и индекс элемента не могут быть отрицательными — вполне логично делать их беззнаковыми. проблемы начинаются, когда в коде для них в одном месте используется знаковые типы, а в другом — беззнаковые.
Логично использовать size_t до тех пор, пока не сядешь в лужу. С Вами, видимо, такого не случалось, а вот со мной случалось. Место жительства size_t — менеджеры памяти, лучше ему оттуда не расползаться по программе.
Создатели Java, наученные горьким опытом C++, вообще практически отказались от беззнаковых типов. uint32 в Java нет. Хотя это слишком радикальное решение: лечение головной боли путём отсечения головы. Но менеджеры памяти на Java не пишут, поэтому там это нормально.
R>зачем в вашем примере GetPos возвращает int? судя по всему только для возможности задать спец значение -1, на мой взгляд в таком случае более правильно использовать явно объявленое значение для беззнакового — как например std::string::npos.
Спросите у Кирпы. Иногда использование барьерных значений (как -1 здесь) позволяет не писать нудных граничных проверок.