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

时间:2015-02-02 14:12:43

标签: c++ casting static-cast

我有一个代码段,如下所示

int name = 10;

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

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

注意:值名称可以静态初始化,也可以在运行时进行评估。

1 个答案:

答案 0 :(得分:2)

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

很可能编译器会将其优化出循环,如果它可以证明name的值在迭代之间不会发生变化。为了确保这一点,请检查生成的组件。

请注意,根据您的平台,演员阵容可能是无操作。如果intsize_t具有相同的大小(在32位平台上很常见),则强制转换没有与之关联的运行时成本。如果它们的大小不同(在64位平台上很常见),则可能涉及运行时操作。再次,要确定,请检查装配。