我有一个代码段,如下所示
int name = 10;
for( size_t var = 0; var < static_cast<size_t>( name ); var++ )
{
std::cout << "hello" << std::endl;
}
在上面的代码中,每次检查for
循环中的条件时,转换也会发生很多次。我当时认为可能会有一些编译时优化。我正在使用MS VS 2010。
注意:值名称可以静态初始化,也可以在运行时进行评估。
答案 0 :(得分:2)
在无优化的环境中,static_cast
确实会在循环的每次迭代中进行评估。
很可能编译器会将其优化出循环,如果它可以证明name
的值在迭代之间不会发生变化。为了确保这一点,请检查生成的组件。
请注意,根据您的平台,演员阵容可能是无操作。如果int
和size_t
具有相同的大小(在32位平台上很常见),则强制转换没有与之关联的运行时成本。如果它们的大小不同(在64位平台上很常见),则可能涉及运行时操作。再次,要确定,请检查装配。