Если у меня такой код, как
class CString { int GetLength(); };
bool smaller(CString s1, std::string s2) {
return s2.size() > s1.GetLength();
}
, что мне лучше всего сделать?
Изменить s1.GetLength()
на (size_t)c.GetLength()
?
Это помогло бы избавиться от предупреждения компилятора о «несоответствии между знаками и без знака» и сообщить о моем намерении выполнить приведение, и это, безусловно, самый простой путь. Но это, вероятно, осуждается. :(
Изменить s1.GetLength()
на static_cast
?
Это помогло бы избавиться от предупреждения с помощью «Правильного» актерского состава.
Изменить s1.GetLength()
на static_cast
?
Это очень многословно... есть ли практическая польза от этой абстракции, или я должен сломать ее?
Оставить как есть?
Это помогло бы заставить компилятор выполнять проверку переполнения с помощью переключателя/RTCc
(моя главная задача здесь) за счет предупреждения.
Сделать что-то еще?
Должен ли я сделать свою собственную функцию литья? Использовать макрос? Должен ли я проверять во время выполнения, а также во время компиляции? Любые другие идеи?
Кажется, что пример воспринимается слишком буквально...
Очевидно, я не хотел говорить простоо CString::GetLength( )
. Этот конкретный метод, безусловно, не вызывает у меня большого беспокойства.:) Что меня беспокоит, так это более общийслучай, когда я получаю целое число, которое никогда не предполагаетсяотрицательным, но которое можеттеоретически быть, из-за ошибок.
Черт возьми, я мог бы написатьметод, который делает это, чтобы переопределить другой фрагмент кода, поэтому я не могу изменить подпись. И в моем коде наверняка могут быть ошибки, хотя я этого и не ожидал.
Что делать в таком случае?