根据标准,在控制结构中声明变量与在其他地方声明变量之间的行为有什么区别?我似乎找不到任何提及它。
如果我所指的内容不清楚,这里有一个例子:
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())