Воскресенье, 13 Декабря 2020 г. 14:14
+ в цитатник
a_n_y_a: Переменную int A я привел для примера. В проекте переменная А работает в алгоритме, и в некоторых случаях ей присваивается значение количества элементов в векторе. Но в других ветках алгоритма, этой переменной присваивается -1, и это значение имеет конкретный смысл.
По поводу преобразования size_t в int. Эта проблема шире, чем я описал. Например такой код:
...::OnPaint()
{
...
CRect r;
GetClientRect(r);
vector mp;
mp.push_back(CPoint(r.left, r.top)); mp.push_back(CPoint(r.right, r.top));
mp.push_back(CPoint(r.right, r.bottom)); mp.push_back(CPoint(r.left, r.bottom));
mp.push_back(CPoint(r.left, r.top));
dc.Polyline(&(mp[0]), IzSIZE_T__to__int(mp.size()));
...
};
Функция Polyline принимает в параметрах количество элементов массива типа int. Чтобы не создавать массив типа
И не указывать количество элементов массива числом, я работаю с вектором. Конечно можно было бы написать:
dc.Polyline(&(mp[0]), (int)mp.size());
Но в этом случае транслятор выдает предупреждение об ошибке при преобразовании типов. А я очень не люблю предупреждений. И программа с таким кодом будет не защищена от ошибок в процессе выполнения.
Почему программа имеет десятки, если не сотни, подобных странных проектных решений? - Все дело в том, что программа разрабатывалась много лет. Это не коммерческая программа. Сейчас я чищу в программе все слабые места. С функцией преобразования size_t в int программа будет более защищенной. Просто раньше я использовал вариант (int)mp.size(). Теперь решил написать IzSIZE_T__to__int(mp.size()).
https://forum.sources.ru/index.php?showtopic=420996&view=findpost&p=3842807
Метки:
Visual C++ / MFC / WTL
-
Запись понравилась
-
0
Процитировали
-
0
Сохранили
-