Согласно стандарту, какова разница в поведении между объявлением переменных в управляющих структурах и объявлением переменных в других местах?Я не могу найти упоминания об этом.
Если то, о чем я говорю, неясно, вот пример:
if (std::shared_ptr<Object> obj = objWeakPtr.lock())
Как видите, я объявляю и инициализирую локальную переменную, obj
,в блоке if.
Кроме того, есть ли какие-либо технические причины, по которым этот синтаксис не имеет какого-либо особого поведения при использовании вместо условного выражения?Например, добавление дополнительного набора скобок приводит к ошибке компилятора;это также предотвращает связывание переменной с другими условиями.
// Extra brackets, won't compile.
if ((std::shared_ptr<Object> obj = objWeakPtr.lock()))
// If the above were valid, something like this could be desirable.
if ((std::shared_ptr<Object> obj = objWeakPtr.lock()) && obj->someCondition())