Неожиданный ответ на умножение vector.size () на string.length () в C ++ - PullRequest
0 голосов
/ 19 сентября 2018

Рассмотрим этот код

string A("a");
vector<string>B={"a","a"};
cout<<A.length()<<endl;;
cout<<B[0].length()<<endl;;
cout<<B.size()<<endl;
cout<<(A.length()-(B[0].length()*B.size()))<<endl;
cout<<(int)(A.length()-(B[0].length()*B.size()))<<endl;

Вывод приведенного выше кода

1
1
2
18446744073709551615
-1

string :: length и string :: size в байтах, а vector :: size - целое число без знака,Почему вывод такой, что означает 18446744073709551615, каков тип данных (A.length()-(B[0].length()*B.size())) и почему целочисленное приведение дает правильный ответ?

1 Ответ

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

size_t строго предназначены для хранения размеров и длин, которые явно не могут быть отрицательными.Это не подписано в природе и зависит от реализации.ваш код принудительно устанавливает отрицательное значение для типа size_t, и, следовательно, вы видите это странное число.

Если вы все сделали правильно, результат должен быть приведен к типу данных, который может принимать отрицательное значение.

Запустите следующий понятный код: (Это должно дать вам тот же результат)

#include <iostream>

int main()
{
    std::size_t size = -1;
    std::cout << size; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...