代码:
void Test()
{
float dt = 0.3;
float playTime = 1;
while ( playTime > 0.0 )
{
const float delta = std::min( playTime, dt );
std::cout << delta << std::endl;
playTime -= delta;
}
}
结果:
0.3
0.3
0.3
0.1
在c ++中,const关键字意味着不会改变。 因此,我们使用关键字const来使变量保持不变。
但在这种情况下,
为什么const var,delta每次被调用都可以改变?
因为,while循环启动新代码块(在堆栈区域中),
所以,我认为变量delta存在于循环执行时。
答案 0 :(得分:4)
因为你在循环的每次迭代中得到一个新的变量。
变量delta
的范围仅限于循环体。这意味着它将在每次迭代时被销毁并重新创建。 const
只是意味着它的值在它活着时不能改变,但是由于你在每次迭代时重新创建它,它的值可能确实在迭代之间改变,而不是在单次迭代的过程中。
请注意,在C ++中,可以以一种在程序的整个生命周期中保持变量的方式声明变量,即使它的范围是左边的。这就是static
关键字的用途。将您的delta
声明更改为static const float delta = std::min( playTime, dt );
,它将始终保持相同的值。
在这种特殊情况下,在循环之前移动声明可能更好,因为static
也会通过多次调用函数Test
来保持变量。
答案 1 :(得分:3)
delta
的范围是while
循环的块。它在它开始时就会生命,并在最后死亡。每次进入和退出块时都会发生这种情况,即每次迭代。
const
限定符仅表示您无法在活动时对其进行修改。它不会改变其寿命。从本质上讲,每次执行块时它都是“不同的”delta
。
如果希望每次迭代都修复它,则必须将其移动到封闭范围(例如函数体),并在那里进行初始化。