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
的值在迭代之间不会改变。为确保这一点,请检查生成的程序集。
请注意,根据您的平台,转换可能是空操作。如果 int
和 size_t
大小相同(在 32 位平台上很常见),则转换没有与之关联的运行时成本。如果它们的大小不同(在 64 位平台上很常见),则可能涉及运行时操作。同样,要确定,请检查程序集。
我有如下代码段
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
的值在迭代之间不会改变。为确保这一点,请检查生成的程序集。
请注意,根据您的平台,转换可能是空操作。如果 int
和 size_t
大小相同(在 32 位平台上很常见),则转换没有与之关联的运行时成本。如果它们的大小不同(在 64 位平台上很常见),则可能涉及运行时操作。同样,要确定,请检查程序集。