在for循环中进行Static_cast

static_cast in a for loop

本文关键字:Static cast for 循环      更新时间:2023-10-16

我知道静态强制转换是在编译时处理的,但是在for循环的条件中进行静态强制转换呢?强制转换是在每次迭代中进行,还是在编译过程中只进行一次?我担心这个实现的成本。我知道编译器会自动强制类型转换,我只是试图删除警告。例如:

double limit = 10.0;
for(int i = 0; i < static_cast<int>(limit); i++)
{
   ...
}

警告是:"从'double'转换为'int'可能会改变其值。"

doubleint不是一回事,它们通常需要不同的寄存器,转换通常不是免费的。如果编译器能够证明limit在循环内没有改变,则可以将转换减少到在循环开始时完成一次。如果编译器可以证明limit等于10.0,那么静态强制转换可以在编译时被10取代。

这取决于你的" ... "代码。


对于这段代码,limit在编译时是已知的。

编译器可以断定它可以在编译时执行一次static_cast 。你的编译器同事可能也想知道为什么你不让limit const 。或者为什么它是从double开始的。

double limit = 10.0;
for(int i = 0; i < static_cast<int>(limit); i++)
{
   std::cout << i;
}

对于这个代码,limit在编译时是未知的。

编译器必须在运行时执行static_cast 每个循环。你的编译器可能也想知道为什么你不让limit const

double limit = 10.0;
for(int i = 0; i < static_cast<int>(limit); i++)
{
   std::cin >> limit;
}