【发布时间】:2013-04-22 05:00:53
【问题描述】:
这更像是一个风格问题,因为我知道在实践中大多数编译器可能会优化以产生相同的效果,但我一直在阅读,一般来说,您应该始终在它们的范围内声明/定义变量被使用。因此,在我无法内联声明的情况下,例如下面的 sn-p,我考虑过将索引变量括在范围括号(大括号,在这种情况下不确定你如何称呼它们)中,以便明确限制这些变量的范围。这是好习惯吗?如果有,请解释一下原因吗?
{
size_t i = 0; // this variable has no use outside of the range-based for loop
for (auto const input : input_vector)
{
neuron_sequence[i].ForceSignal(input);
++i;
}
}
【问题讨论】:
-
"花括号,在这种情况下不知道你怎么称呼它们" 它们被称为“花括号”。在所有情况下;)
-
“大多数编译器可能会优化以提供相同的效果”。你能举个例子吗?
-
“大多数编译器可能会优化以提供相同的效果” - 在 3.7.3/3 中通常不可能:“如果具有自动存储持续时间的变量具有初始化或具有副作用的析构函数,它不应在其块结束之前被销毁,即使它看起来未使用也不应作为优化而被消除,除非类对象或其复制/移动可以被消除为在 12.8 中指定。”
-
@NicolBolas:标准只是称它们为大括号......卷曲是多余的。
-
感谢您的回复。都非常有帮助。