Я изучаю стандарт для своей команды, используя size_t
vs int
(или long
и т.д.). Самый большой недостаток, который я видел, заключается в том, что разница между двумя объектами size_t может вызвать проблемы (я не уверен в конкретных проблемах - возможно, что-то не было дополнено 2s, а подписанный /unsigned сердитый компилятор). Я написал быструю программу на С++, используя компилятор V120 VS2013, который позволил мне сделать следующее:
#include <iostream>
main()
{
size_t a = 10;
size_t b = 100;
int result = a - b;
}
В результате программы -90
, которая, хотя и правильная, вызывает у меня беспокойство по поводу несоответствий типов, проблем с подписью/без знака или просто поведения undefined, если size_t используется для использования в сложной математике.
Мой вопрос: безопасно ли выполнять математику с объектами size_t, в частности, принимая разницу? Я рассматриваю использование size_t в качестве стандарта для таких вещей, как индексы. Я видел несколько интересных сообщений по этой теме, но они не затрагивают математическую проблему (или я ее пропустил).
Какой тип для вычитания 2 size_t?
typedef для подписанного типа, который может содержать size_t?