Я использую библиотеку с функцией, которая имеет параметр типа int
,
Мне нужно передать размер вектора в качестве аргумента для этого параметра.
Я знаю, что могу получить размер вектора, используя someVector.size()
, но это возвращает тип size_t
,
Я знаю, что могу разыграть size_t
для int
Например, static_cast<int>(someVector.size())
, Тем не менее, приведение может вызвать проблемы, если someVector.size()
превышает максимальное значение int
,
Как правильно передать размер вектора функции, для которой требуется параметр типа int
?
Там нет «безопасный» способ пройти std::size_t
к функции, принимающей int
(всякий раз, когда size_t
больше максимального представимого int
ты в беде). Однако вы можете проверить, безопасен ли проход:
if(v.size() < std::numeric_limits<int>::max()) // need to #include <limits>
{
// safe to pass
}
else
{
// not safe, throw error/exit/print something
}
Сравнение всегда безопасно при условии int
положительно.
Я бы посмотрел документацию библиотеки для решений, они могут принимать значения типа unsigned int
который очень похож на size_t
, Вот еще один пост, который может помочь: без знака int против size_t.