標準によると、制御構造で変数を宣言する場合と、他の場所で変数を宣言する場合の動作の違いは何ですか? 私はそれについての言及を見つけることができないようです。
私が言っていることが明確でない場合は、例を次に示します。
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())