Почему я не могу назначить std :: Необязательно std :: lock_guard?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Почему я не могу назначить std :: Необязательно std :: lock_guard?

Сообщение Anonymous »

Почему я не могу объявить необязательный std :: lock_guard , а затем назначить его позже? То же самое с дополнительной строкой работает просто отлично. < /P>
Это работает: < /p>

Код: Выделить всё

std::mutex m;
std::optional lg(m);
< /code>
Но это не: (*) < /p>
std::mutex m;
std::optional lg;
lg = std::lock_guard(m);
< /code>
А не: (**) < /p>
std::mutex m;
std::optional lg;
lg = std::optional(m);
< /code>
Но это так: < /p>
std::string s;
std::optional os;
os = std::string(s);
< /code>
И это так: < /p>
std::string s;
std::optional os;
os = std::optional(s);
< /code>
(*) Сообщение об ошибке: < /p>
1>c:\dev\repos\tp_iu2\iu2\pretests\j00010_adaptercal.cpp(51): error C2679: binary '=': no operator found which takes a right-hand operand of type 'std::lock_guard' (or there is no acceptable conversion)
1>c:\program files (x86)\microsoft visual studio\2017\professional\vc\tools\msvc\14.13.26128\include\optional(547): note: could be 'std::optional &std::optional::operator =(const std::optional &)'
1>c:\program files (x86)\microsoft visual studio\2017\professional\vc\tools\msvc\14.13.26128\include\optional(320): note: or       'std::optional &std::optional::operator =(std::nullopt_t) noexcept'
1>c:\dev\repos\tp_iu2\iu2\pretests\j00010_adaptercal.cpp(51): note: while trying to match the argument list '(std::optional, std::lock_guard)'
< /code>
(**) Сообщение об ошибке: < /p>
1>c:\dev\repos\tp_iu2\iu2\pretests\j00010_adaptercal.cpp(51): error C2280: 'std::optional &std::optional::operator =(const std::optional &)': attempting to reference a deleted function
1>c:\program files (x86)\microsoft visual studio\2017\professional\vc\tools\msvc\14.13.26128\include\optional(547): note: compiler has generated 'std::optional::operator =' here
1>c:\program files (x86)\microsoft visual studio\2017\professional\vc\tools\msvc\14.13.26128\include\optional(547): note: 'std::optional &std::optional::operator =(const std::optional &)': function was implicitly deleted because a base class invokes a deleted or inaccessible function 'std::_Deleted_move_assign &std::_Deleted_move_assign::operator =(const std::_Deleted_move_assign &)'
Решением было использование std :: ulious_ptr вместо этого, поэтому я спрашиваю только из любопытства.

Подробнее здесь: https://stackoverflow.com/questions/794 ... lock-guard
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»