static_cast 每次在 for 循环条件下都会 运行 吗?

Will the static_cast will run every time in the for loop condition?

我有如下代码段

int name = 10;

for( size_t var = 0; var < static_cast<size_t>( name ); var++ )
{
    std::cout << "hello" << std::endl;
}

在上面的代码中,每次检查for循环中的条件时,转换也会发生很多次。我在想可能会有一些编译时优化。我正在使用 MS VS 2010。

注意:值名称可以静态初始化,也可以在 运行 次计算。

在无优化环境中,static_cast 确实会在循环的每次迭代中进行评估。

很有可能编译器会在循环外对其进行优化,如果可以证明name的值在迭代之间不会改变。为确保这一点,请检查生成的程序集。

请注意,根据您的平台,转换可能是空操作。如果 intsize_t 大小相同(在 32 位平台上很常见),则转换没有与之关联的运行时成本。如果它们的大小不同(在 64 位平台上很常见),则可能涉及运行时操作。同样,要确定,请检查程序集。