代码:
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使vars常量。
但在这种情况下,
为什么每次调用const,delta都可以更改?
循环启动新代码块(在堆栈区域),
因此,我认为变量,增量已经存在为循环执行。
发布于 2017-11-20 07:38:32
因为在循环的每一次迭代中都会得到一个新变量。
变量delta的作用域仅限于循环的主体。这意味着它将被摧毁和重新创建与每一次迭代。const仅仅意味着它的值不能在其存在时发生变化,但是由于您用每次迭代重新创建它,它的值实际上在迭代之间可能会发生变化,只是在一个迭代过程中从未改变过。
请注意,在C++中可以声明一个变量,即使它的作用域保留在整个程序的生存期内。这就是static关键字的作用所在。将您的delta声明更改为static const float delta = std::min( playTime, dt );,它将始终保留相同的值。
但是,在这种特殊情况下,最好在循环之前移动声明,因为static还将通过多次调用函数Test来持久化该变量。
发布于 2017-11-20 07:34:05
delta的作用域是while循环的块。它从一开始就开始了生命,在最后死去了。每次输入和退出块时,即每次迭代时,都会发生这种情况。
const限定符只意味着您不能在它还活着时修改它。它不会改变它的寿命。本质上,每次执行块时,它都是一个“不同”的delta。
如果希望为每次迭代修复它,则必须将其移动到一个封闭作用域(例如函数体),并在那里进行初始化。
https://stackoverflow.com/questions/47386982
复制相似问题