Почему индексирование строки в c ++ дает предупреждение о неявном преобразовании? - PullRequest
0 голосов
/ 09 сентября 2018

У меня есть две строки одинаковой длины, и мне нужно посмотреть, являются ли они одной и той же строкой, я знаю, что есть встроенный способ сделать это, а также перегрузка оператора, чтобы сделать это, как бы я ни хотел сюда. Что происходит путем проверки и посмотреть, если s1[i]==s2[2], однако, когда я делаю это, я получаю следующее предупреждение:

implicit conversion changes signedness: 'int' to 'std::basic_string<char,
std::char_traits<char>, std::allocator<char> >::size_type' (aka 'unsigned long long')

Вот что я делаю, чтобы получить это предупреждение:

for (auto i=0;i<word.size();i++)
    {
         if(alphabets[i]==word[i])
            counter++;
    }

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

Строковые индексы определены как тип size_t, который определен как неподписанный. Так как ваш i имеет тип int, который подписан, необходимо выполнить неявное преобразование типов для преобразования между подписанным и неподписанным типами. Компилятор предупреждает об этом из-за странности, которая возникает, если вы преобразуете отрицательные числа таким образом.

0 голосов
/ 09 сентября 2018

auto i = 0 дает i, который должен быть определен как int. Использование std::size_t i = 0 вместо этого решит проблему

...