【发布时间】:2011-11-24 08:42:15
【问题描述】:
根据标准,在控制结构中声明变量与在其他地方声明变量之间的行为有什么区别?我似乎找不到任何提及它。
如果我的意思不清楚,这里有一个例子:
if (std::shared_ptr<Object> obj = objWeakPtr.lock())
如您所见,我在 if 块中声明并初始化了一个局部变量 obj。
另外,是否有任何技术原因说明为什么在使用此语法代替条件时没有给出任何特殊行为?例如,添加一组额外的括号会导致编译器错误;这也可以防止变量与其他条件链接。
// 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())
【问题讨论】:
-
这里的括号没有什么特别之处。这也是非法的:
for ((int ii = 0); ii < 42; ++ii) { ... }。有时添加明显多余的括号会将有效语法更改为无效语法。
标签: c++ iso control-structure