Ну, сначала обратите внимание, что бросок явный запрос для преобразования значения одного типа к значению другого типа . Бросок будет также всегда производить новый объект, который является временным файлом, возвращенным оператором броска. Кастинг к ссылочному типу, однако, не создаст новый объект. Объекту, на который ссылается значение, дают иное толкование как ссылка другого типа.
Теперь к Вашему вопросу. Обратите внимание, что существует два главных типа преобразований:
-1
к неподписанному типизированному объекту, например. В некоторых случаях неправильное преобразование может привести к неопределенному поведению. При присвоении двойного большего, чем, что плавание может сохранить к плаванию, поведение не определяется. Позволяют нам посмотреть на Ваши броски:
int i = 10;
unsigned int k = (unsigned int) i; // :1
float fl = 10.123;
unsigned int ufl = (unsigned int) fl; // :2
char *p = "Stackoverflow Rocks";
unsigned char *up = (unsigned char *) p; // :3
unsigned int
. Если бы целое число было отрицательно, значение в основном перенесло бы максимальное значение неподписанного интервала (см. 4.7/2). 10.123
является усеченным к 10. Здесь, это делает причина, потерянная информации, очевидно. Как 10 вписывается в неподписанный интервал, поведение определяется. char*
. Но давайте проигнорируем это здесь. (см. здесь ). Что еще более важно, что действительно происходит, если Вы бросаете к неподписанному типу? На самом деле результат этого является неуказанным на [1 124] 5.2.10/7 (обратите внимание, что семантика того броска совпадает с использованием reinterpret_cast в этом случае, так как это - единственная способность броска C++ сделать это): указатель А на объект может быть явно преобразован в указатель на объект другого типа. За исключением того, что, преобразовывая rvalue типа “pointer к T1” к типу "указатель на T2" (где T1 и T2 являются типами объектов и где требования выравнивания T2 не более строги, чем те из T1) и назад к его исходному типу приводит к исходному значению указателя, результат такого преобразования указателя является неуказанным.
, Таким образом, Вы только в безопасности использовать указатель после того, как Вы вспомните char *
снова.
sudo apt-get install build-essential python3-dev python2.7-dev libldap2-dev libsasl2-dev slapd ldap-utils python-tox lcov valgrind
Исправлять ошибку из-за зависимостей для установки python-ldap: загрузка Windows 7/10
whl файл
http://www.lfd.uci.edu/~gohlke/pythonlibs/#python-ldap .
иск python 3.6 с
python_ldap-3.2.0-cp36-cp36m-win_amd64.whl
Развертывают файл в:
c:\python36\Scripts\
установка это с [1 110]
python -m pip install python_ldap-3.2.0-cp36-cp36m-win_amd64.whl