Berkus
то есть лучше взять const char * а не std::string
смотря что дешевле, каждый раз конструировать из нее std:;string или каждый раз проверять флаг инициализации
Berkus
по-моему флаг дешевле
Sergey
тоже верно
🐙 Antony
то есть лучше взять const char * а не std::string
Да, вот пример https://godbolt.org/g/k6Q853
Berkus
но если например нужен только string_view то он вроде тоже в constexpr умеет инициализироваться, правда не во всех либах
Sergey
кажется, дешевле всего не делать её статик
🐙 Antony
Рекурсивный мьютекс будет лочиться только при неудачной проверке переменной, отвечающий за статик поле. Если там раскоментировать строчку, то вначале будет test al, al je .L16 И если уже не сложилось - тогда лочится мьютекс
Berkus
В C++17 должен быть constexpr. Об этом один товарисч позаботился
он не везде равномерно поддерживается, в последней версии libc++ которую выпустил эпол не работает конструктор constexpr string_vew(char const*) но работает (char const*, size_t) что неколько неудобно
🐙 Antony
Угу, не все компиляторы/stl могут в C++17
🐙 Antony
Но constexpr в случае с инициализацией татических переменных не обязательное условие. Если может проинициализировать константно и без constexpr
Danila
Здравствуйте, извините за беспокойство, мы команда разработчиков (30 человек) с Южной Кореи, учимся в г. Владивостоке, имеем колоссальный опыт в программировании, готовы сотрудничать.
🐙 Antony
Жаль только что компиляторы лажают в этом месте https://godbolt.org/g/7Dg5MY Сейчас тикет заведу в GCC
Alexander "SonnySlave"
Alexander "SonnySlave"
расист что ли?
🐙 Antony
Тикет на константную инициализацию статических переменных https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84099
Anton
Тикет на константную инициализацию статических переменных https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84099
забавно, если сделать структуру аггрегатом, то оптимизация работает
🐙 Antony
Ага
Igor
почему ни слова про С++17
C++17 Cookbook *некропост*
Anton
Ага
также для статических *не-локальных* переменных кланг (в отличие от gcc) выполняет оптимизацию
🐙 Antony
Вроде транковая версия оптимизирует https://godbolt.org/g/omkmPW
Anton
Вроде транковая версия оптимизирует https://godbolt.org/g/omkmPW
а как ты видишь? он же делает dead global elimination.
🐙 Antony
А как посмотреть понадёжнее?
Anton
надо заэкстернить
Anton
вроде
🐙 Antony
Ага... сейчас заведу отдельный тикет
🐙 Antony
Готово https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84103
🐙 Antony
Тебе спасибо!
Billy
кто нить работал с конаном и артифактори ? сам сетапил репу? У меня при заливки в артифактори получаются там файлы 0го размера. и ничерта не работает ясное дело, если сливать завиисмости. спасибо
Alexander "SonnySlave"
что именно не так?
Alexander "SonnySlave"
Я создавал репу на бинтрее, потом ключ с неё подтягивал в локальные настройки и всё
Alexander "SonnySlave"
после этого conan upload работал как часы
Billy
что именно не так?
я собираю 2 пакета делаю аплоад в artifactory. есть лог с аплоада, где видно, что артифакт имеют размер и аплоадятся. Когда я сливаю потом, все размеры 0. Если зайти на вебморду artifactory, то там видно, что там все до идоного файлы с размером 0 байт
Billy
я не понимаю, это баг конанa, моего днк, или artifactory
Billy
угу
Billy
пасиб
Alexander "SonnySlave"
Billy
danke
RaFaeL
добрый день
RaFaeL
подскажите пожалуйста размер в памяти вот такой структуры
RaFaeL
typedef struct lxw_image_options { / Offset from the left of the cell in pixels. */ int32_t x_offset; / Offset from the top of the cell in pixels. */ int32_t y_offset; / X scale of the image as a decimal. */ double x_scale; / Y scale of the image as a decimal. */ double y_scale; lxw_row_t row; lxw_col_t col; char *filename; char *url; char *tip; uint8_t anchor; /* Internal metadata. */ FILE *stream; uint8_t image_type; double width; double height; char *short_name; char *extension; double x_dpi; double y_dpi; lxw_chart *chart; STAILQ_ENTRY (lxw_image_options) list_pointers; } lxw_image_options;
RaFaeL
человеку который пишет на другом языке )
Igor
объявления lxw_*** в студию
Ignat
%zu!
Igor
z? %llu, разве нет?
RaFaeL
суть проблемы - есть dll и туда надо передать параметр
RaFaeL
по апи там 4 первых
RaFaeL
но dll потом обрабатывает хвост и крэшится. надо занулить лишнее перед передачей
Konstantin
/
Ignat
z? %llu, разве нет?
size_t же, а не long long какой
Igor
но dll потом обрабатывает хвост и крэшится. надо занулить лишнее перед передачей
а может лучше ничего не занулять, а передавать в длл struct options_for_dll { int32_t x_offset; int32_t y_offset; double x_scale; double y_scale; } ?
RaFaeL
я так сначала и делал
RaFaeL
но есть нюанс
RaFaeL
там на приеме идет if (user_options) memcpy(options, user_options, sizeof(lxw_image_options));
RaFaeL
т.е. размер не того что пришло а размер вот этого описания
Berkus
человеку который пишет на другом языке )
оно будет равно sizeof(lxw_image_options)
Berkus
z? %llu, разве нет?
или cout « или через специальный libc макрос
Berkus
иначе непортабельн
Ignat
ну %zu — это что-то из С99
Ignat
не уверен, что это часть плюсового стандарта
Berkus
RaFaeL
да я уже отправил issue сказали ин фьюча релиз будет фикс
RaFaeL
но крэш то у меня сейчас
Igor
там на приеме идет if (user_options) memcpy(options, user_options, sizeof(lxw_image_options));
ну тогда size_t offset = sizeof(int32_t)*2 + sizeof(double)*2; memset(((void*)&options)+offset, 0, sizeof(lxw_image_options) - offset)
RaFaeL
не, этот исходник я править не буду
RaFaeL
надо просто очистить память перед передачей на нужную длину
Igor
ну это оно и есть