Size: a a a

2020 July 14

AT

Alexander T in pro.cxx
Alex
А можно вот таким образом использовать operator, ?
if (std::lock_guard lock(mutex), a && b) {}


Идея в том, чтобы вычислить и проверить a && b (bool), но сделать это под локом.
А вообще, спрячь-ка условие и лок в IIFE лямбду, и будет тебе счастье
источник

🎄T

🎄🎊 R 🎅 Tb| ✡️ 🎊🎄... in pro.cxx
Alex
Я не понимаю, почему не компилится и почему именно такие ошибки, уже все варианты скобок перепробовал https://godbolt.org/z/T8h9vK
Имя убрать надо
источник

AT

Andrew Titov in pro.cxx
Alex
Я не понимаю, почему не компилится и почему именно такие ошибки, уже все варианты скобок перепробовал https://godbolt.org/z/T8h9vK
Потому что ты используешь declaration внутри expression.
источник

IZ

Ilia Zviagin in pro.cxx
Alex
А можно вот таким образом использовать operator, ?
if (std::lock_guard lock(mutex), a && b) {}


Идея в том, чтобы вычислить и проверить a && b (bool), но сделать это под локом.
Да должно работать, но я бы точно не назвал это хорошим стилем.
Лучше написать

bool res = false;
{
  std::lock_guard lock(mutex);
 res = a && b;
}

if( res )
// ...


или ещё лучше -- функцией это сделать
источник

A

Alex in pro.cxx
🎄🎊 R 🎅 Tb| ✡️ 🎊🎄
Имя убрать надо
хм, спс, понял
источник

IZ

Ilia Zviagin in pro.cxx
Andrew Titov
Потому что ты используешь declaration внутри expression.
Это не декларейшн. Это темпорари объект
источник

AT

Andrew Titov in pro.cxx
Ilia Zviagin
Это не декларейшн. Это темпорари объект
Именованный?
источник

A

Alex in pro.cxx
Ilia Zviagin
Да должно работать, но я бы точно не назвал это хорошим стилем.
Лучше написать

bool res = false;
{
  std::lock_guard lock(mutex);
 res = a && b;
}

if( res )
// ...


или ещё лучше -- функцией это сделать
В принципе я согласен, но в конкретном случае это будет неудобно
источник

IZ

Ilia Zviagin in pro.cxx
Andrew Titov
Именованный?
нет
источник

A

Alex in pro.cxx
🎄🎊 R 🎅 Tb| ✡️ 🎊🎄
Имя убрать надо
но без имени это почти наверняка не будет правильно работать
источник

🎄T

🎄🎊 R 🎅 Tb| ✡️ 🎊🎄... in pro.cxx
Alex
но без имени это почти наверняка не будет правильно работать
Временный объект удалиться после условия сразу
источник

A

Alex in pro.cxx
после условия - хорошо. А вот до вычисления правой части запятой - плохо.
источник

AT

Andrew Titov in pro.cxx
Я не понял, где там используется temporary object. Там же переменная определяется.
источник

🎄T

🎄🎊 R 🎅 Tb| ✡️ 🎊🎄... in pro.cxx
Alex
после условия - хорошо. А вот до вычисления правой части запятой - плохо.
После
источник

IZ

Ilia Zviagin in pro.cxx
Andrew Titov
Я не понял, где там используется temporary object. Там же переменная определяется.
Я про оригинальный вариант
источник

A

Alex in pro.cxx
Точно? На cppreference, например, это не описано
источник

🎄T

🎄🎊 R 🎅 Tb| ✡️ 🎊🎄... in pro.cxx
Alex
Точно? На cppreference, например, это не описано
источник

AT

Andrew Titov in pro.cxx
Ilia Zviagin
Я про оригинальный вариант
Этот?
if (std::lock_guard lock(mutex), a && b) {}
источник

A

Alex in pro.cxx
Спасибо большое)
источник

IZ

Ilia Zviagin in pro.cxx
Alex
А можно вот таким образом использовать operator, ?
if (std::lock_guard lock(mutex), a && b) {}


Идея в том, чтобы вычислить и проверить a && b (bool), но сделать это под локом.
Блин, @WeekendDriver , а зачем там имя переменной?
источник