同じ関数の2つのバージョンが、一方がインラインでもう一方がインラインでないことだけが異なる場合、どうすれば異なる値を返すことができますか?これが私が今日書いたいくつかのコードですが、それがどのように機能するのかわかりません。
#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
編集:clang ++ 7.0.0はこれを出力します:
0
0
0
およびg ++ -Ofast this:
1
1
1