Kla*_*aim 1 c++ compiler-optimization
一个小测试程序:
#include <iostream>
const float TEST_FLOAT = 1/60;
const float TEST_A = 1;
const float TEST_B = 60;
const float TEST_C = TEST_A / TEST_B;
int main()
{
std::cout << TEST_FLOAT << std::endl;
std::cout << TEST_C << std::endl;
std::cin.ignore();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
结果:
0
0.0166667
Run Code Online (Sandbox Code Playgroud)
在Visual Studio 2008和2010上测试过.
Jam*_*lis 11
在
1/60
Run Code Online (Sandbox Code Playgroud)
两个操作数都是整数,因此执行整数运算.要执行浮点运算,至少有一个操作数需要具有浮点类型.例如,以下任何一个都将执行浮点除法:
1.0/60
1.0/60.0
1/60.0
Run Code Online (Sandbox Code Playgroud)
(您可以选择使用1.0f,以避免任何精度降低警告; 1.0具有类型double,同时1.0f具有类型float)
不应该
TEST_FLOAT具有相同的价值TEST_C?
在这种TEST_FLOAT情况下,执行整数除法,然后float在赋值中转换整数除法的结果.
在这种TEST_C情况下,整数文字1并在分配给和时60转换为; 然后对这些浮点数执行浮点除法,并将结果赋值给.floatTEST_ATEST_BTEST_C
TEST_C值是在编译时还是在运行时解析?
这取决于编译器; 任何一种方法都符合标准.