Size: a a a

2020 May 24

v

vehlwn in pro.cxx
Oleg Linkin
я в курсе базы. Я просто не совсем понимаю, что именно надо лочить. Точнее, я понимаю, как работать с многопоточным контейнером: врапнуть его и лочить на операциях. Но, не совсем понимаю, когда у тебя указатель на структуру, которая используется в двух потоках. Делать лок перед любым действием с ней что ли?
Ловушка потокоопасных шаред птров.
источник

OL

Oleg Linkin in pro.cxx
vehlwn
Ловушка потокоопасных шаред птров.
у меня только рав поинтеры
источник

v

vehlwn in pro.cxx
Работа с объектом через шаред птр на него не потокобезопасна.
источник

v

vehlwn in pro.cxx
Oleg Linkin
у меня только рав поинтеры
Почему?
источник

OL

Oleg Linkin in pro.cxx
vehlwn
Anthony Williams - C++ Concurrency in Action-Manning Publications (2019).pdf
спасибо. Интересная книга. Прям приятно читать
источник

OL

Oleg Linkin in pro.cxx
vehlwn
Почему?
потому что жизнь - боль
источник

OL

Oleg Linkin in pro.cxx
Oleg Linkin
спасибо. Интересная книга. Прям приятно читать
собственно, я все понимал правильно, просто из-за отсутствия опыта написания многопоточки -боялся, что все понимал неправильно
источник

СВ

Сергей Васильев... in pro.cxx
нашел код транспонирования матрицы на CUDA, вставил в CUDA-проект, а он не хочет инклудить стандартные библиотеки типа conio и stdio
источник

СВ

Сергей Васильев... in pro.cxx
что это может быть?
источник

MM

Mikhail Matrosov in pro.cxx
А вот господа академики, накиньте-ка на вентилятор. Вот я хочу сформулировать рекомендацию: если заводишь локальную константу, то объявляй её как static constexpr, а не просто constexpr или const. Например:

int foo1() {
   static constexpr std::array v = { 1, 2, 3 };
   return bar(v);
}


Почему это важно? Потому что если её объявить просто constexpr, то компилятор будет обязан создавать новый объект, если bar принимает параметр по ссылке: https://gcc.godbolt.org/z/yHTSnf

Для фундаментальных типов это менее актуально, но всё равно возможно. Если bar это объявление шаблона без тела, например.

Плюсы вроде понятны. А какие минусы? Во-первых, лишнее слово. Во-вторых, может быть какая-то доп. работа на этапе старта программы. Но мне казалась, что там просто память должна зарезервироваться и всё. Может как-то может повлиять на размер бинаря? Что-то ещё?
источник

А

Александр in pro.cxx
Всем привет. Вопрос в следующем: заполнение шаблона odt в qt. Замену текста заполнение таблицы освоил. Как вставить изображение в шаблонный документ?
источник

N

Neargye in pro.cxx
Mikhail Matrosov
А вот господа академики, накиньте-ка на вентилятор. Вот я хочу сформулировать рекомендацию: если заводишь локальную константу, то объявляй её как static constexpr, а не просто constexpr или const. Например:

int foo1() {
   static constexpr std::array v = { 1, 2, 3 };
   return bar(v);
}


Почему это важно? Потому что если её объявить просто constexpr, то компилятор будет обязан создавать новый объект, если bar принимает параметр по ссылке: https://gcc.godbolt.org/z/yHTSnf

Для фундаментальных типов это менее актуально, но всё равно возможно. Если bar это объявление шаблона без тела, например.

Плюсы вроде понятны. А какие минусы? Во-первых, лишнее слово. Во-вторых, может быть какая-то доп. работа на этапе старта программы. Но мне казалась, что там просто память должна зарезервироваться и всё. Может как-то может повлиять на размер бинаря? Что-то ещё?
static constexpr в  constexpr функциях работать не будет, не знаю насколько это важно. https://gcc.godbolt.org/z/C59Ska
источник

MM

Mikhail Matrosov in pro.cxx
Neargye
static constexpr в  constexpr функциях работать не будет, не знаю насколько это важно. https://gcc.godbolt.org/z/C59Ska
да, хорошее замечание, спасибо. но тут уж сейчас ничего не сделаешь, а в будущем, надеюсь, пофиксят. пропозал уже есть
источник

N

Neargye in pro.cxx
Mikhail Matrosov
да, хорошее замечание, спасибо. но тут уж сейчас ничего не сделаешь, а в будущем, надеюсь, пофиксят. пропозал уже есть
> пропозал уже есть
можете показать? мне было бы полезно)
источник

v

vehlwn in pro.cxx
Mikhail Matrosov
А вот господа академики, накиньте-ка на вентилятор. Вот я хочу сформулировать рекомендацию: если заводишь локальную константу, то объявляй её как static constexpr, а не просто constexpr или const. Например:

int foo1() {
   static constexpr std::array v = { 1, 2, 3 };
   return bar(v);
}


Почему это важно? Потому что если её объявить просто constexpr, то компилятор будет обязан создавать новый объект, если bar принимает параметр по ссылке: https://gcc.godbolt.org/z/yHTSnf

Для фундаментальных типов это менее актуально, но всё равно возможно. Если bar это объявление шаблона без тела, например.

Плюсы вроде понятны. А какие минусы? Во-первых, лишнее слово. Во-вторых, может быть какая-то доп. работа на этапе старта программы. Но мне казалась, что там просто память должна зарезервироваться и всё. Может как-то может повлиять на размер бинаря? Что-то ещё?
А если моя константа невычислима в компалтайме и должна каждый раз пересчитываться при входе в вфункцию какой смысл в статик конкстекспр?
источник

v

vehlwn in pro.cxx
Mikhail Matrosov
А вот господа академики, накиньте-ка на вентилятор. Вот я хочу сформулировать рекомендацию: если заводишь локальную константу, то объявляй её как static constexpr, а не просто constexpr или const. Например:

int foo1() {
   static constexpr std::array v = { 1, 2, 3 };
   return bar(v);
}


Почему это важно? Потому что если её объявить просто constexpr, то компилятор будет обязан создавать новый объект, если bar принимает параметр по ссылке: https://gcc.godbolt.org/z/yHTSnf

Для фундаментальных типов это менее актуально, но всё равно возможно. Если bar это объявление шаблона без тела, например.

Плюсы вроде понятны. А какие минусы? Во-первых, лишнее слово. Во-вторых, может быть какая-то доп. работа на этапе старта программы. Но мне казалась, что там просто память должна зарезервироваться и всё. Может как-то может повлиять на размер бинаря? Что-то ещё?
>компилятор будет обязан создавать новый объект
Ну создаст и создаст.
источник

MM

Mikhail Matrosov in pro.cxx
vehlwn
А если моя константа невычислима в компалтайме и должна каждый раз пересчитываться при входе в вфункцию какой смысл в статик конкстекспр?
ну тогда это не константа, это просто const variable ))
источник

v

vehlwn in pro.cxx
std::optional<Image> opt = getImage();
const Image image = std::move(*opt);

Зачем тут статик и констекспр?
источник

v

vehlwn in pro.cxx
Mikhail Matrosov
ну тогда это не константа, это просто const variable ))
Я не понял вопрос автора. Он хочет приравнять конст = статик констекспр?
источник

MM

Mikhail Matrosov in pro.cxx
нет. скорее так: если мы можем сделать переменную static constexpr, то следует это сделать
источник