Как правильно использовать? (Или мне вообще это делать?)

Если у меня такой код, как

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(c.GetLength())?
    Это помогло бы избавиться от предупреждения с помощью «Правильного» актерского состава.

  • Изменить s1.GetLength()на static_cast(c.GetLength())?
    Это очень многословно... есть ли практическая польза от этой абстракции, или я должен сломать ее?

  • Оставить как есть?
    Это помогло бы заставить компилятор выполнять проверку переполнения с помощью переключателя/RTCc(моя главная задача здесь) за счет предупреждения.

  • Сделать что-то еще?
    Должен ли я сделать свою собственную функцию литья? Использовать макрос? Должен ли я проверять во время выполнения, а также во время компиляции? Любые другие идеи?

Редактировать:

Кажется, что пример воспринимается слишком буквально...

Очевидно, я не хотел говорить простоо CString::GetLength( ). Этот конкретный метод, безусловно, не вызывает у меня большого беспокойства.:) Что меня беспокоит, так это более общийслучай, когда я получаю целое число, которое никогда не предполагаетсяотрицательным, но которое можеттеоретически быть, из-за ошибок.

Черт возьми, я мог бы написатьметод, который делает это, чтобы переопределить другой фрагмент кода, поэтому я не могу изменить подпись. И в моем коде наверняка могут быть ошибки, хотя я этого и не ожидал.

Что делать в таком случае?

11
задан Mehrdad 5 April 2012 в 09:11
поделиться