Anonymous
сдаюсь, кто объяснит мне почему так происходит?
Artem
int и long разные типы, и компилятор считает, что int* и long* не могут указывать на одно и то же место в памяти, и оптимизирует исходя из этого.
Artem
Это называется strict aliasing. А ключ -fno-strict-aliasing его отключает.
Anonymous
эгхм.. в чём же тогда заключается эта оптимизация?
Anonymous
клевая задача
Anonymous
сам бы не догадался, наверное
Artem
оптимизация? ну он видит, что возвращается то, что положили по *x (константа 1), и не видит возможностей для его изменения. Поэтому вместо того, чтобы лишний раз доступаться по указателю, он возвращает константу
babysitter
думаю что-то такое должно решить проблему
int f(volatile int* x, long* y)
babysitter
нет, на кланге не решило
Stanislav
по стандарту только const volatile
🦥Alex Fails
http://ideone.com/erDo29
Stanislav
🦥Alex Fails
😂😂😂😂😂
Anonymous
Anonymous
Vladislav
И компилятору так кажется)
🦥Alex Fails
Это лажовая идея от слова совсем
🦥Alex Fails
Но я все равно, так и не понял, как избавиться от сырых указателей в том случае
Vladislav
так, может? http://ideone.com/sLTRGV
🦥Alex Fails
А. Да
🦥Alex Fails
Я тогда ступил с operator new в конструкторе ptr'а
🦥Alex Fails
Надо make_*<T>([T_ctor_params])
Vladislav
да, и перемещать vector вместо копии
Михаил
Кто может подсказать, куда пропадает 4 элемент: http://pastebin.com/Jbh1j5R2 Собираю в VS2010. Компилятор делает интересный финт ушами, он создает новый ObjectPoi(ObjectJump &j), так как не находит другого способа передать ObjectJump в ObjectPoi, и, заменяет 4 на 7. Не понятно как он это делает. Видно, что не через ObjectPoi(ObjectPoi &j). В итоге 7 объект удаляется два раза, а 4 ни одного.
Vladislav
не "интересный финт ушами", а implicit conversion
Михаил
Не похоже это на неявное преобразование типов.
VS2012 ведет себя аналогично.
Михаил
Как запретить это преобразование? Он по сути делает memcpy() одного объекта в другой. В результате два объекта с 7 номером.
Vladislav
пометь конструтор как explicit
Михаил
Если пометить, то при компиляции вылезает ошибка в ObjectPoi(ObjectJump &j). А тут все правильно работает. Проблема дальше, в создании нового ObjectPoi и замене им старого через memcpy(). Это действие надо запретить.
babysitter
это не должно компилиться нигде, не знаю как это вообще работает
Vladislav
вообще да, приличные компиляторы говорят вот так: https://ideone.com/OU62Ko
Vladislav
Михаил
Да, в гцц не компилится. Хочу понять, что в VS не так и пойти исправлять код для гцц.
babysitter
я специально решил глянуть, что студия скажет, чисто для того чтобы убедиться. неявное преобразование она разрешает, но p = obj.New(); — это ж вызов operator=(), которого нет
Крылатый
Vladislav
в VS, вероятно, нетривиальный UB из-за кривого компилятора
Vladislav
Vladislav
из-за этого такое поведение - id тупо копируется
babysitter
2010 что тут скажешь
Vladislav
MS никогда не умела в компиляторы
Vladislav
у меня до сих пор ночные кошмары от VS6 :)
Михаил
Михаил
Как этот код теперь под гцц собрать?
Vladislav
расставить const в нужных местах, для начала
Aleksey Vdovenko
Помогите написать функцию для листа: необходима функция, которая выполняет такую строчку
l1 = l2.reverse();
Где функция reverse - разворачивает лист
Aleksey Vdovenko
Важно, что l2 изменяться не должен
babysitter
std::transform + std::reverse?
Aleksey Vdovenko
Библиотеками пользоваться нельзя(
Aleksey Vdovenko
Ну просто скажите суть: как вернуть в новый лист, измененный исходный
Aleksey Vdovenko
При условии, что исходный меняться не должен
babysitter
создаешь новый лист, проходишься по первому в обратном порядке, копируешь элементы в новый, возвращаешь, профит
Anonymous
Aleksey Vdovenko
list *tmp = new list;
Так?
Aleksey Vdovenko
И возвращать указатель?
Anonymous
по значению вернуть уже не в моде?
Aleksey Vdovenko
А там когда в функции создаешь, область видимости листа остается в функции, не?
Anonymous
ну дк... он скопируется в область вне функции.
Anonymous
по идее
Aleksey Vdovenko
Я так пробовал, он возвращает на пустую область
babysitter
в худшем случае — это копирование, а так это nrvo
babysitter
так все, иди в супапро
Aleksey Vdovenko
А через указатель это же вроде утечка памяти? Нет?
Anonymous
https://telegram.me/joinchat/BYlFbD3eN3JMaG34hyh96w
Михаил
В студии можно настроить, чтобы умные указатели показывались в отладчике как обычные? user->role CXX0063: ошибка: неподдерживаемый перегруженный оператор ->.
Enver Akhtemov
kali linux еще актуален?
Светомеч
✙ Fatum ✙
ребят, есть проблема
✙ Fatum ✙
может кто подскажет?
✙ Fatum ✙
использую dlib в обвязке с opencv, использую функцию ресайз, но компиль ругается, что в св нет такой ф-ции
✙ Fatum ✙
хотя она есть и в доке я ее нашла
✙ Fatum ✙
g++ -std=c++11 -O3 -I.. webcam_face_pose_ex.cpp
webcam_face_pose_ex.cpp: In function ‘int main()’:
webcam_face_pose_ex.cpp:73:13: error: ‘resize’ is not a member of ‘cv’
cv::resize(im, im_small, cv::Size(), 1.0/FACE_DOWNSAMPLE_RATIO, 1.0/FACE_DOWNSAMPLE_RATIO);
^
✙ Fatum ✙
http://docs.opencv.org/3.1.0/da/d54/group__imgproc__transform.html#ga47a974309e9102f5f08231edc7e7529d
✙ Fatum ✙
я не понимаю, что я делаю не так
🦥Alex Fails
надо хедеры курить
🦥Alex Fails
Вот что ты инклудишь?