Как две версии одной и той же функции, отличающиеся только тем, что одна встроена, а другая нет, могут возвращать разные значения? Вот код, который я написал сегодня, и я не уверен, как это работает.
#include <cmath>
#include <iostream>
bool is_cube(double r)
{
return floor(cbrt(r)) == cbrt(r);
}
bool inline is_cube_inline(double r)
{
return floor(cbrt(r)) == cbrt(r);
}
int main()
{
std::cout << (floor(cbrt(27.0)) == cbrt(27.0)) << std::endl;
std::cout << (is_cube(27.0)) << std::endl;
std::cout << (is_cube_inline(27.0)) << std::endl;
}
Я ожидал бы, что все выходные данные будут равны 1
, но он фактически выводит это (g++ 8.3.1, без флагов):
1
0
1
вместо
1
1
1
Редактировать: клан g++ 7.0.0 выводит это:
0
0
0
и g++ -Ofast это:
1
1
1